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

Динамические структуры: линейные списки - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.88
Zaya007
 Аватар для Zaya007
0 / 0 / 0
Регистрация: 11.03.2009
Сообщений: 38
11.03.2009, 14:21     Динамические структуры: линейные списки #1
Люди помогите
Дали задачу из учебника Павловской
Вот вроде смотрю как в учебнике написано про линейные списки все понятно.
Как начинаю пытаться решить задачу впадаю в ступор!!:'(:'(:'(
Помогите люди добрые!

Предметный указатель организован как линейный список.
Каждая компонента указателя содержит слово и номера страниц, на которых это
слово встречается. Количество номеров страниц, относящихся к одному слову, от
одного до десяти.
Составить программу, которая обеспечивает:
• начальное формирование предметного указателя;
• вывод предметного указателя;
• вывод номеров страниц для заданного слова.
Программа должна обеспечивать диалог с помощью меню и контроль ошибок
при вводе.

есть конечно решение похожей задачи, но оно слишком замудреное, с ним я точно не разберусь:'(:'(
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
11.03.2009, 14:36     Динамические структуры: линейные списки #2
я че-то в условие не вьеду

структура должны быть описано так?

C++
1
2
3
4
5
6
7
struct PRED_UKAZ
{
     char *word;
     int page;
     PRED_UKAZ *next;
     PRED_UKAZ *prev;
}
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.03.2009, 14:49     Динамические структуры: линейные списки #3
C++
1
2
3
4
5
6
typedef struct nlist {
    char word[100];
    int page[10], npages;   /* npages для вывода страниц потом */
    /* struct nlist *prev, *next; */ /* для задачи сойдёт односвязный - меньше кода */
    struct nlist *next;
} Lnode, *Lnodep;
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
11.03.2009, 15:09     Динамические структуры: линейные списки #4
и так че у тебя не получается?

p.s: ты Си или Си++ учишь? просто синтаксис сишный в структуре у тебя
Zaya007
 Аватар для Zaya007
0 / 0 / 0
Регистрация: 11.03.2009
Сообщений: 38
11.03.2009, 16:05  [ТС]     Динамические структуры: линейные списки #5
Don Corleone, дык структуру то я и сама написала, проблема с написанием функций к ней, у меня что-то плохо получается дружить с у казателями
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.03.2009, 16:08     Динамические структуры: линейные списки #6
известно что не получается, поиск слова по ходу
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.03.2009, 16:16     Динамические структуры: линейные списки #7
кое-что подобное, есть поиск по определённому критерию
Вложения
Тип файла: zip swimmers.tar.zip (1.9 Кб, 45 просмотров)
Zaya007
 Аватар для Zaya007
0 / 0 / 0
Регистрация: 11.03.2009
Сообщений: 38
11.03.2009, 16:23  [ТС]     Динамические структуры: линейные списки #8
accept, у меня скорей проблема с начальным формированием этого предметного указателя!!!
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.03.2009, 16:57     Динамические структуры: линейные списки #9
предметный указатель никак не связан с понятием указателя из языка

здесь предметный указатель == список узлов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    Lnodep a = CreateNode();
    Lnodep b = CreateNode();
    
    a->word = "one";
    a->page[0] = 5;
    a->pages = 1;
    a->next = b;
 
    b->word = "two";
    b->page[0] = 10;
    b->page[1] = 12;
    b->pages = 2;
    b->next = NULL;
список получился такой a->b->nil

бывают узлы типа
C++
1
    Lnode a;
а бывают указатели на узлы (то есть хранящие просто адрес памяти, где расположен узел)
C++
1
    Lnodep ap;
при этом записи Lnodep ap; и Lnode *ap; одинаковы
Zaya007
 Аватар для Zaya007
0 / 0 / 0
Регистрация: 11.03.2009
Сообщений: 38
11.03.2009, 17:05  [ТС]     Динамические структуры: линейные списки #10
accept, спасибо, завтра попробую, а то сегодня уже голова пухнет%)

Добавлено через 2 минуты 26 секунд
А
C++
1
2
Lnodep a = new Node;
Lnodep b = new Node;
не одно и то же???
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.03.2009, 17:11     Динамические структуры: линейные списки #11
тогда
C++
1
Lnodep a = new Lnode;
лучше написать
C++
1
2
3
4
Lnodep CreateNode(void)
{
    return (Lnodep) new Lnode;
}
и юзать потом
C++
1
    Lnodep a = CreateNode();
так понятнее будет, что за действия производятся на любом этапе
Zaya007
 Аватар для Zaya007
0 / 0 / 0
Регистрация: 11.03.2009
Сообщений: 38
11.03.2009, 17:19  [ТС]     Динамические структуры: линейные списки #12
%)
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
11.03.2009, 22:20     Динамические структуры: линейные списки #13
ну посмотри вот... я тут реализовывал дек.. т.е. можешь сделать подобно, толлько вместо Data свои поля создать..ну и убрать пару ненужных функций

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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/////////////////////////////////////////////////////////////////
//          (c) 2009 Igor Kalnitsky                          //
/////////////////////////////////////////////////////////////////
#include <iostream.h>
#include <conio.h>
/////////////////////////////////////////////////////////////////
struct dek_node
{
    int data;
    dek_node *prev;
    dek_node *next;
};
/////////////////////////////////////////////////////////////////
dek_node *CreateDek(int Data)
{
    dek_node *dekNode = new dek_node;
    
    dekNode->data = Data;
    dekNode->prev = NULL;
    dekNode->next = NULL;
    
    return dekNode;
}
/////////////////////////////////////////////////////////////////
dek_node *PutBegin(dek_node *dek,int Data)
{
    dek_node *dekNode = new dek_node;
 
    while (dek->prev != 0) dek = dek->prev;
 
    dekNode->data = Data;
    dekNode->prev = NULL;
    dekNode->next = dek;
 
    dek->prev = dekNode;
 
    return dekNode;
}
/////////////////////////////////////////////////////////////////
dek_node *PutEnd(dek_node *dek,int Data)
{
    dek_node *dekNode = new dek_node;
 
    while (dek->next != 0) dek = dek->next;
 
    dekNode->data = Data;
    dekNode->prev = dek;
    dekNode->next = NULL;
 
    dek->next = dekNode;
 
    return dekNode;
}
/////////////////////////////////////////////////////////////////
void ExtractEnd(dek_node *dek)
{
 
    while (dek->next != 0) dek = dek->next;
 
    do
    {
        cout << dek->data << " ";
        dek = dek->prev;
    } while(dek->prev != 0);
 
    cout << dek->data;
}
/////////////////////////////////////////////////////////////////
void ExtractBegin(dek_node *dek)
{
    
    while (dek->prev != 0) dek = dek->prev;
 
    do 
    {
        cout << dek->data << " ";
        dek = dek->next;
    } while(dek->next != 0);
 
    cout << dek->data;
}
/////////////////////////////////////////////////////////////////
dek_node *ClearDek(dek_node *dek)
{
    while (dek->next != 0) dek = dek->next;
 
    while (dek->prev != 0)
        {
            dek_node *tmp = dek;
            dek = dek->prev;
            dek->next = NULL;
            delete tmp;
        }
 
    return dek;
}
/////////////////////////////////////////////////////////////////
bool IsSpace(dek_node *dek)
{
    if (dek->next == NULL && dek->prev == NULL) 
        return true;
 
    return false;
}
/////////////////////////////////////////////////////////////////
int main()
{
    int data;
 
    cout << "Vvedite element deka = ";
    cin >> data;
 
    dek_node *dek = CreateDek(data);
 
    cout << "Dobavit v nachalo Deka = ";
    cin >> data;
    dek = PutBegin(dek, data);
 
    cout << "Dobavit v konec Deka = ";
    cin >> data;
    dek = PutEnd(dek, data);
 
    cout << "\nDek s nachala: \n";
    ExtractBegin(dek);
 
    cout << "\n";
 
    cout << "Dek s konca: \n";
    ExtractEnd(dek);
 
    cout << "\n\nOchishaem dek...\n";
    dek = ClearDek(dek);
 
    cout << "\nDek pustoi? ";
    if (IsSpace(dek)==true) 
        cout << "Yes"; else cout << "No";
 
    getch();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2009, 08:14     Динамические структуры: линейные списки
Еще ссылки по теме:

C++ Задача на линейные списки
Динамические структуры данных. Односвязные списки C++
Односвязные линейные списки C++
Стек, очередь (линейные списки) C++
Односвязные линейные списки C++

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

Или воспользуйтесь поиском по форуму:
Zaya007
 Аватар для Zaya007
0 / 0 / 0
Регистрация: 11.03.2009
Сообщений: 38
12.03.2009, 08:14  [ТС]     Динамические структуры: линейные списки #14
Don Corleone, Спасибо теперь что-то получается, думаю теперь смогу разобраться
Yandex
Объявления
12.03.2009, 08:14     Динамические структуры: линейные списки
Ответ Создать тему
Опции темы

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