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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2011, 16:03   #1
fable0097
Новичок
Джуниор
 
Регистрация: 16.05.2011
Сообщений: 1
По умолчанию Двусвязный список(C++)

Вобщем нужно реализовать основные функции для работы с двусвязанным списком (вставка элемента,удаление,печать,сортировка ).
вот что уже набросал:
Цитата:
#include <iostream>
#include <conio.h>
using namespace std;
struct Node
{
int d;
Node *next;
Node *prev;
};
Node * first(int d);
void add(Node **pend, int d);
Node * find(Node * const pbeg, int i);
bool remove(Node **pbeg, Node **pend, int key);
Node *insert(Node *const pbeg, Node **pend, int key, int d);
void PrintList(Node *pbeg);
void main()
{}
Node *first(int d)// Формирование первого элемента
{
Node *pv = new Node;
pv->d = d; pv->next = 0; pv->prev = 0;
return pv;
}

void add(Node **pend, int d)// Добавление в конец списка
{
Node *pv = new Node;
pv->d = d; pv->next = 0; pv->prev = *pend;
(*pend)->next = pv;
*pend = pv;
}
Node *find(Node *const pbeg, int d)// Поиск элемента по ключу
{
Node *pv = pbeg;
while (pv)
{
if(pv->d == d)break;
pv = pv->next;
}
return pv;
}
bool remove(Node **pbeg, Node **pend, int key)// Удаление элемента
{
if(Node *pkey = find(*pbeg, key))
{
if (pkey == *pbeg)// проверяется,находится ли удаляемый элемент в начале списка
{
*pbeg = (*pbeg)->next;// если да,то надо скорректировать указатель pbeg на начало списка так, чтобы он указывал на следующий элемент в списке, адрес которого находится в поле next первого элемента
(*pbeg)->prev =0;// обнуляется указатель на предыдущий элемент
}
else if (pkey == *pend)// если удаляемый элемент находится в конце списка, требуется сместить указатель pend конца списка на предыдущий элемент, адрес которого можно получить из поля prev последнего элемента
{
*pend = (*pend)->prev;
(*pend)->next=0;// обнуляется указатель на следующий элемент
}
else // Если удаление происходит из середины списка, то нужно лишь обеспечить двустороннюю связь предыдущего и последующего элементов
{
(pkey->prev)->next = pkey->next;
(pkey->next)->prev = pkey->prev;
}
delete pkey;
return true;
}
return false;
}

Node *insert (Node *const pbeg, Node **pend, int key, int d)// Вставка элемента
{
if(Node *pkey = find(pbeg, key))
{
Node *pv = new Node;
pv->d = d;
pv->next = pkey->next;// установление связи нового узла с последующим
pv->prev = pkey;// установление связи нового узла с предыдущим
pkey->next = pv;// установление связи предыдущего узла с новым
if(pkey != *pend)(pv->next)->prev = pv;// установление связи последующего узла с новым
// Обновление указателя на конец списка,
// если узел вставляется в конец

else *pend = pv;
return pv;
}
return 0;
}
void PrintList(Node *pbeg)// Печать списка
{
// pv пробегает по списку, начиная с головы
Node *pv = pbeg;
while(pv != NULL)// пока не конец списка, печатать значение данных текущего узла
{
cout << pv->d << endl;
pv = pv->next; // перейти к следующему узлу
}
}
только в структуре и в функциях вместо int char должен быть.
Осталось с помощью этих функции оформить как функцию вот такую вещь: Даны натуральные числа k, m, n символы s1, ... , sk, t1, ... , tm, u1, ... , un. Получить по одному разу те символы, которые входят одновременно во все три последовательности.
Подкиньте идею..

Последний раз редактировалось fable0097; 16.05.2011 в 16:08.
fable0097 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двусвязный список decantnik Паскаль, Turbo Pascal, PascalABC.NET 0 09.05.2011 00:58
Двусвязный список Work Group Паскаль, Turbo Pascal, PascalABC.NET 12 13.07.2010 01:44
двусвязный список Work Group Помощь студентам 0 24.05.2010 21:27
двусвязный список klykovka Помощь студентам 8 22.05.2010 18:58
двусвязный список на си++ mizantrop32 Общие вопросы C/C++ 0 18.05.2010 17:45