Добавление элементов в двусвязный список на нечетные места 1.3.5..
Добавлено: 11 июн 2017, 12:18
Есть двусвязный список типа int . Переделать его в тип char и вместо удаления элементов сделать добавление элементов на нечетные места 1.3.5..
Код: Выделить всё
#include "stdafx.h"
#include <deque>
#include <iostream>
#include <ctime>
using namespace std;
struct point//описание структуры
{
int key;//ключевое поле
point* pred,*next;//адресные поля
};
point*make_list(int n)
{
point *p,*r,*beg,*p1,*p2,*m,*l,*t;
p=new (point);//создать первый элемен
beg=p;//запомнить адрес в переменную beg, в которой хранится начало списка
p1=0;
p2=beg;
cout<<"Element- ";
cin>>p->key;//заполнить ключевое поле
p->pred=0;
p->next=0;//запомнить адресные поля
for(int i=1;i<n;i++)//добавить элементы в конец списка
{
r=new(point);//новый элемент
cout<<"Element- ";
cin>>r->key;//адресное поле
p->next=r;//связать начало списка с r
r->pred=p;//связать r с началом списка
r->next=0;//обнулить последнее адресное поле
p=r;//передвинуть p на последний элемент списка
}
m=p;
while(m!=0)//пока не конец списка
{
cout<<m->key<<"\t";
m=m->pred;//перейти на следующий
}
t=p;
l=0;
while(t)
{
if(t->key%2==0)
{
l=t;
break;
}
t=t->pred;
}
if (l!=0)
{
if (l==beg)
{
beg=beg->next;
beg->pred=NULL;
}
else if (l==p)
{
t=t->pred;
t->next=NULL;
}
else
{
(l -> pred)->next = l -> next;
(l -> next ) -> pred = l -> pred;
}
}
cout<<endl;
point*s=beg;
while (s!=0)
{
cout<<s->key<<"\t";
s=s->next;
}
cout<<endl;
return beg;//вернуть первый элемент списка
}
void main()
{
int n;
cout<<"Size of list?- ";
cin>>n;
point*beg;
beg=make_list(n);
system("pause");
}