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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2008, 18:51   #1
Марсель059
 
Регистрация: 13.10.2008
Сообщений: 5
По умолчанию Однонаправленные списки в си

Необходимо создать однонаправленный список с указателем и информационным полем в с++. тип информационного поля int. необходимо удалить элементы с четными информационными полями.
Не может ли ктонибудь мне подсказать как это делать?
Марсель059 вне форума Ответить с цитированием
Старый 14.10.2008, 00:03   #2
Skoverdrive
 
Регистрация: 12.10.2008
Сообщений: 7
По умолчанию

Например:

struct Elm {
int value;
Elm *prv;
};

class List {
public:
List(); //конструктор

//------set------
void setTop( Elm * );
//------get------
int getVal( Elm * );
Elm *getTop();

void Add( int );
void Delete( Elm * );

private:
int size;
Elm *Top;
};

Elm - это структура с целым информационным полем и указателем на предыдущий элемент, соответственно Top - указатель на самый последний элемент списка. При добавлении элемента в список создаем новую структуру Elm, указателю Top присваиваем адрес этой структуры, потом указателю prv присваиваем адрес предыдущего элемента и value - нужное значение. Таким образом списак "связывается". Потом обходим список, проверяем если поле четное, то удаляем элемент из списка: указателю предыдущего элемента присваем указатель на следующий, не забываем сделать delete.
+нужно отдельное условие обрабатывать, если удаляем Top-элемент - здесь просто меняем указатель на последний элемент, и потом тоже delete.
Skoverdrive вне форума Ответить с цитированием
Старый 14.10.2008, 00:37   #3
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

я сегодня почему то очень добрый, решил тебе сделать полностью. На самом деле у меня эта лаба была по сям на втором курсе, я ее нагло списал надо восстановить справедливость)

Код:
#include "iostream"

struct ELEM {
	int value;
	ELEM *pNext;
}*head;

void AddItem(int m_val)
{
	ELEM *pElem = new ELEM;
	pElem->value = m_val;
	pElem->pNext = head;
	head = pElem;
}

void DeleteItems()
{
	ELEM *elem = head;
	ELEM *prev = NULL;

	while (elem) 
	{
		if (elem->value % 2 == 0)
		{
			if (prev)
			{
				prev->pNext = elem->pNext;
				elem = elem->pNext;
				continue;
			}
			else
				head = elem->pNext;
		}
		prev = elem;
		elem = elem->pNext;
	}
}

void PrintList()
{
	ELEM *elem = head;
	while (elem) 
	{
		printf("%d\n", elem->value);
		elem = elem->pNext;
	}
}

int main()
{
	for (int i = 0; i < 100; i++)
		AddItem(i);

	DeleteItems();
	PrintList();
	
	return 0;
}
vvviperrr вне форума Ответить с цитированием
Старый 14.10.2008, 12:22   #4
Марсель059
 
Регистрация: 13.10.2008
Сообщений: 5
По умолчанию

Спасибо огромнейшее, а то ни в одной книге ничего не мог найти
Марсель059 вне форума Ответить с цитированием
Старый 16.10.2008, 18:39   #5
zven_
Пользователь
 
Регистрация: 16.10.2008
Сообщений: 18
По умолчанию

Присоединяюсь к этой теме.
вот условие задачи:
Создать однонаправленный список.
Тип информационного поля char*.
Добавить в список элемент после элемента с заданным информационным полем.

Не может ли кто нибудь мне подсказать как это делать?!
zven_ вне форума Ответить с цитированием
Старый 18.10.2008, 21:24   #6
zven_
Пользователь
 
Регистрация: 16.10.2008
Сообщений: 18
По умолчанию

значит никто не поможет?(
zven_ вне форума Ответить с цитированием
Старый 18.10.2008, 21:47   #7
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

2zven_ чему тут помогать то. немного изменить функцию DeleteItems проги, которую я написал выше. ну и поле свое на чар поменять) и все готово.
vvviperrr вне форума Ответить с цитированием
Старый 19.10.2008, 12:45   #8
zven_
Пользователь
 
Регистрация: 16.10.2008
Сообщений: 18
По умолчанию

2vvviperrr все равно не понятно ) знаю, что поле сменю на чар это дело легкое, а вот изменить самой функции DeleteItems я не знаю че изменять... и то условие написано, что надо сначала заполнять свое информационное поле, а потом уже ввести где добавить в список элемент и после элемента с заданным информационным полем...
zven_ вне форума Ответить с цитированием
Старый 19.10.2008, 23:09   #9
NjaalkemeBit
Пользователь
 
Регистрация: 19.10.2008
Сообщений: 32
По умолчанию

Цитата:
Сообщение от zven_ Посмотреть сообщение
Присоединяюсь к этой теме.
вот условие задачи:
Создать однонаправленный список.
Тип информационного поля char*.
Добавить в список элемент после элемента с заданным информационным полем.

Не может ли кто нибудь мне подсказать как это делать?!
Собственно тоже постигаю данный материал…в частности списки односвязные…
прикрепил тут свои наброски, сырцы еще сыроваты, но тем не менее…
Вложения
Тип файла: txt ListOneWay.txt (3.0 Кб, 224 просмотров)
NjaalkemeBit вне форума Ответить с цитированием
Старый 20.10.2008, 22:00   #10
zven_
Пользователь
 
Регистрация: 16.10.2008
Сообщений: 18
По умолчанию

о_О ужс.... длинный код.... спасибо большое конечно, но там всего ошибка одна всего лишь.. "lab3_test5.cpp(158) : error C2065: 'getchar' : undeclared identifier"
..

мне б попроще код программы нужен... длинный код препод не примет лабораторку...будет задавать кучу вопросов...и... скажет не прально все это...
zven_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На списки... Neznau Паскаль, Turbo Pascal, PascalABC.NET 1 02.07.2008 19:49
Списки Вилен Общие вопросы C/C++ 3 22.05.2008 00:40
списки Влдислаав3911 Паскаль, Turbo Pascal, PascalABC.NET 5 10.05.2008 17:35
Списки AVer Паскаль, Turbo Pascal, PascalABC.NET 6 06.12.2006 23:05