Добавление элементов в двусвязный список на нечетные места 1.3.5..

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
anasttb
Сообщения: 1
Зарегистрирован: 11 июн 2017, 12:16

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");
}
Слива
Сообщения: 133
Зарегистрирован: 19 мар 2016, 10:15

11 июн 2017, 18:20

Это же сообщение видел сегодня на programmersforum.ru. :D Изучайте С++, товарищ, тем более, что Вашу программу проще с нуля написать.
Ответить