Форум программистов, компьютерный форум CyberForum.ru

Двусвязанный список - C++

Восстановить пароль Регистрация
 
faith0097
0 / 0 / 0
Регистрация: 30.03.2011
Сообщений: 17
16.05.2011, 15:49     Двусвязанный список #1
Вобщем нужно реализовать основные функции для работы с двусвязанным списком (вставка элемента,удаление,печать,сортировка).
вот что уже набросал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#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)// Печать списка
{
    // currPtr пробегает по списку, начиная с головы
    Node *pv = pbeg;
    while(pv != NULL)// пока не конец списка, печатать значение данных текущего  узла 
    {
        cout << pv->d << endl;
        pv = pv->next; // перейти к следующему узлу 
    }
}
Добавлено через 2 минуты
Осталось с помощью этих функции оформить как функцию вот такую вещь: Даны натуральные числа k, m, n символы s1, ... , sk, t1, ... , tm, u1, ... , un. Получить по одному разу те символы, которые входят одновременно во все три последовательности.

Добавлено через 16 минут
немного с типом правда налажал. в структуре,да и везде в функциях char должен быть
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2011, 15:49     Двусвязанный список
Посмотрите здесь:

Двусвязанный список (чтение/запись в файл) C++
Список: связный список, в котором информация о книгах сортируется по убыванию стоимости. C++
C++ Двумерный двусвязанный список
C++ 3 класса: список, стек(как список), очередь(как список)
list. Cоздать список из результатов(с массивами), а потом просмотреть весь список C++
C++ создать список л3 из элементов входящих и в список л1 и в список л2
C++ Необходимо создать список, элемент которого может быть список
Создать список, после каждого отрицательного числа вставить в список 0 C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 23:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru