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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2009, 19:28   #11
Annenen
 
Регистрация: 17.02.2009
Сообщений: 8
По умолчанию

динамический
Annenen вне форума Ответить с цитированием
Старый 17.02.2009, 19:41   #12
Игорь007
Пользователь Подтвердите свой е-майл
 
Аватар для Игорь007
 
Регистрация: 30.05.2008
Сообщений: 96
По умолчанию

Цитата:
вот эти ссылки(связи) как-то в коде отображаются?
Динамические списки в основном реализуются в виде структур даных либо классов. В этих структурах обычно содержаться указатели на следующий и/либо предыдущий элемент (на структуру этого же типа). Что бы знать, где конец списка, в посдеднем элементе указатель на следующий зануляют. В общем counter дал ссылку. Знакомся...
Потом уже и вопросы задавай поконкретнее.
Игорь007 вне форума Ответить с цитированием
Старый 17.02.2009, 19:44   #13
Annenen
 
Регистрация: 17.02.2009
Сообщений: 8
По умолчанию

каунтер дал ссылку и там есть пример
Код:
#include<iostream.h>
struct node
{ 
   int value; 
   node *next;
}; 

void main ()
{
   int i;
   node *phead, *t;

   phead = new (node);
   t = phead;

   (*t).value = 1;
   (*t).next = new (node);
   t = (*t).next;

   (*t).value = 2;
   (*t).next = new (node);
   t = (*t).next;

   (*t).value = 6;
   (*t).next = new (node);
   t = (*t).next;

   (*t).value = 17;
   (*t).next = new (node);
   (*t).next = NULL;
   // Вывод содержимого информационных полей списка
   for (t=phead; t!=NULL; t=(*t).next) 
                cout<<(*t).value << " ";
}
это статический список?
мне получается надо в цикле задавать значения элементов. потом определить последний. например здесь надо удалить э-нт который "17"?
Annenen вне форума Ответить с цитированием
Старый 17.02.2009, 19:53   #14
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Сообщение от Annenen Посмотреть сообщение
это статический список?
мне получается надо в цикле задавать значения элементов. потом определить последний. например здесь надо удалить э-нт который "17"?

это динамический список, т.к. для добавления нового элемента выделяется память по указателю next*

Код:
(*t).next = new (node);
counter вне форума Ответить с цитированием
Старый 17.02.2009, 20:00   #15
Игорь007
Пользователь Подтвердите свой е-майл
 
Аватар для Игорь007
 
Регистрация: 30.05.2008
Сообщений: 96
По умолчанию

Цитата:
Сообщение от Annenen Посмотреть сообщение
каунтер дал ссылку и там есть пример
[/CODE]
потом определить последний. например здесь надо удалить э-нт который "17"?
Нужно найти предпоследний элемент. Занулить его указатель на следующий элемент, предварительно освободив память под последний элемент.

Если t указывает на предпоследний:
Код:
delete t->next;
t->next = 0;
Только смотри, чтобы у тебя было как минимум два элемента в списке, иначе просто освобождай память под единственный элемент и зануляй его, для порядка.
Игорь007 вне форума Ответить с цитированием
Старый 17.02.2009, 20:30   #16
Annenen
 
Регистрация: 17.02.2009
Сообщений: 8
По умолчанию

вот возник вопрос с организацией цикла, я быстренько обрисовал, но чует сердце что это "t<=5" не так должно быть
Код:
for (t=phead; t<=5; t=(*t).next) //ввод эл-ов
{
    if(t<5)
    {
    scanf("%d", t->value);  //? - так можно?
    t->next = new (node);
    t = t->next;
    }
    else
    {
    scanf("%d", t->value);  //? - так можно?
    t->next = new (node);
    t->next = NULL;
    }
}
Annenen вне форума Ответить с цитированием
Старый 17.02.2009, 20:39   #17
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

вы хотите добавлять элементы?

это пример создания очереди

Код:

// структура данных
struct data {

	wchar_t name[20];
	wchar_t phone[15];
	wchar_t adress[40];
	wchar_t mail[20];
	wchar_t site[20];
	wchar_t work[20];
};


// класс реализующий очередь
class MyQueue {

	INFO *Head;
	INFO *End;
	
public :

	~MyQueue();
	void push(INFO);             // vstavlyaet v konec
		
};

// добавление элементов
void MyQueue::push(INFO data)

{
	if(Head==NULL)// если нет головы списка, то создаем ее
	{	
		Head=new INFO;
		*Head=data;
		Head->Next=NULL;
		End=Head;
		
	}
	else // остальные элементы добавляем в конец
	{
		End->Next=new INFO;
		*End->Next=data;
		End->Next->Next=NULL;
		End=End->Next;
	}
};

// деструктор
MyQueue::~MyQueue()
{
	INFO *tmp=Head;
	while(tmp!=NULL)
	{
	   tmp=tmp->Next;
	   delete [] Head;
	   Head=tmp;
	}	
	End=NULL;
};

Последний раз редактировалось counter; 17.02.2009 в 20:42.
counter вне форума Ответить с цитированием
Старый 17.02.2009, 20:47   #18
Игорь007
Пользователь Подтвердите свой е-майл
 
Аватар для Игорь007
 
Регистрация: 30.05.2008
Сообщений: 96
По умолчанию

Цитата:
вот возник вопрос с организацией цикла, я быстренько обрисовал, но чует сердце что это "t<=5" не так должно быть
Куча ошибок.
Я так понимаю это ввод значений и ты хочешь создать список из шести элементов? Тогда нужно так.
Цитата:
phead = new (node);
for (t=phead, int i = 0; i<5; t=(*t).next, i++) //ввод эл-ов
{
scanf("%d", &(t->value)); // - вот так нужно
t->next = new (node);
}
t = t->next;
scanf("%d", &(t->value));
t->next = 0;
неуверен с
Код:
t = t->next;
возможно и не нужно.
Короче проверишь...

Последний раз редактировалось Игорь007; 17.02.2009 в 20:57.
Игорь007 вне форума Ответить с цитированием
Старый 17.02.2009, 21:04   #19
Annenen
 
Регистрация: 17.02.2009
Сообщений: 8
По умолчанию ?????

1) t->next = 0;
или всё таки
2) t->next = null;

ну а так вроде бы всё хорошо и почти понятно=))
всем спасибо за мои дурацкие вопросы
Annenen вне форума Ответить с цитированием
Старый 17.02.2009, 21:07   #20
Игорь007
Пользователь Подтвердите свой е-майл
 
Аватар для Игорь007
 
Регистрация: 30.05.2008
Сообщений: 96
По умолчанию

Цитата:
1) t->next = 0;
или всё таки
2) t->next = null;
как вам нравится, так и пишите. Разницы нету.
Игорь007 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Данные-проверка-список (список на другом листе) Inbox Microsoft Office Excel 7 26.12.2008 01:43
Добавление в список ManU Помощь студентам 3 28.09.2008 12:55
Двухсвязный список StarScream2008 Общие вопросы C/C++ 1 19.09.2008 20:04
Список панелей Кронос Общие вопросы Delphi 1 23.08.2007 16:27