Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2017, 12:19   #1
anasttb
Пользователь
 
Регистрация: 24.02.2017
Сообщений: 32
По умолчанию Добавление элементов в двусвязный список на нечетные места 1.3.5..

Есть двусвязный список типа 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");
}
anasttb вне форума Ответить с цитированием
Старый 11.06.2017, 12:55   #2
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от anasttb Посмотреть сообщение
Код:
p=new (point);//создать первый элемент
- что-то здесь не так, разве это работает? Вот так по-моему надо писать:
Код:
point *p;
p = new point();
Cuprum5 вне форума Ответить с цитированием
Старый 11.06.2017, 13:12   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от anasttb Посмотреть сообщение
Код:
r->next=0;//обнулить последнее адресное поле
- создай просто class point и там сделай конструктор, который обнуляет эти числа(prev и next) там. Зачем там дека, кстати, в инклудах - деки нет в коде.
Автор, Вы в этой программе разбираетесь? Вроде 28 сообщений уже - надо бы уже в программировании разбираться. Я, если честно, условие задачи не понял. Как можно в двухсвязный список добавить элементы на нечетные места 1, 3, 5 и т.д. Они ведь подряд идут - там нет нечетных мест, это Вам не массив.

Последний раз редактировалось Cuprum5; 11.06.2017 в 13:27.
Cuprum5 вне форума Ответить с цитированием
Старый 11.06.2017, 13:46   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Цитата:
там нет нечетных мест, это Вам не массив
гонки на лыжах с пистолетами - тоже не массив, однако, там есть первое, второе, третье места ) Очевидно, поставить в начало списка, а затем вставлять через одного.

Цитата:
типа int . Переделать его в тип char
Неужели и с этим есть проблемы?

Цитата:
вместо удаления элементов сделать добавление
Есть наработки свои? Копипаст от однокурсника со схожей задачей плохая идея.
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двусвязный список, добавление в указанное место Ayir Общие вопросы C/C++ 9 18.09.2015 18:59
Двусвязный список: Как реализовать подсчет количества элементов в списке и поиск индекса элемента по его имени? Дана188 Помощь студентам 4 13.05.2015 16:45
Нужен совет - добавление элементов в грид через выпадающий список на Delphi 2909 Помощь студентам 1 25.07.2012 18:14
Двусвязный список(C++) fable0097 Помощь студентам 0 16.05.2011 16:03
двусвязный список на си++ mizantrop32 Общие вопросы C/C++ 0 18.05.2010 17:45