0 / 0 / 0
Регистрация: 11.03.2009
Сообщений: 38
1

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

11.03.2009, 14:21. Показов 3350. Ответов 13
Метки нет (Все метки)

Люди помогите
Дали задачу из учебника Павловской
Вот вроде смотрю как в учебнике написано про линейные списки все понятно.
Как начинаю пытаться решить задачу впадаю в ступор!!:'(:'(:'(
Помогите люди добрые!

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

есть конечно решение похожей задачи, но оно слишком замудреное, с ним я точно не разберусь:'(:'(
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2009, 14:21
Ответы с готовыми решениями:

Динамические структуры (линейные списки): Run-Time Check Failure #2 - Stack around the variable ... was corrupted.
Снова необходима ваша срочная помощь. Программа по димнамическим структурам на С++. Выполняет все...

Линейные односвязные списки, динамические массивы
Помогите пожалуйста Читая целые числа из текстового файла, создать линейный односвязный список...

Динамические структуры: списки
Создать линейный однонаправленный список из вещественных чисел. Удалить из списка элемент перед...

Динамические структуры данных. Списки
Ребят, срочно нужна помощь, помогите пожалуйста, кто чем может! Задание: В деке задать слово....

13
2815 / 1406 / 107
Регистрация: 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;
}
1
4865 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
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;
0
2815 / 1406 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
11.03.2009, 15:09 4
и так че у тебя не получается?

p.s: ты Си или Си++ учишь? просто синтаксис сишный в структуре у тебя
0
0 / 0 / 0
Регистрация: 11.03.2009
Сообщений: 38
11.03.2009, 16:05  [ТС] 5
Don Corleone, дык структуру то я и сама написала, проблема с написанием функций к ней, у меня что-то плохо получается дружить с у казателями
0
4865 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
11.03.2009, 16:08 6
известно что не получается, поиск слова по ходу
0
4865 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
11.03.2009, 16:16 7
кое-что подобное, есть поиск по определённому критерию
Вложения
Тип файла: zip swimmers.tar.zip (1.9 Кб, 47 просмотров)
0
0 / 0 / 0
Регистрация: 11.03.2009
Сообщений: 38
11.03.2009, 16:23  [ТС] 8
accept, у меня скорей проблема с начальным формированием этого предметного указателя!!!
0
4865 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
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; одинаковы
0
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;
не одно и то же???
0
4865 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
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();
так понятнее будет, что за действия производятся на любом этапе
0
0 / 0 / 0
Регистрация: 11.03.2009
Сообщений: 38
11.03.2009, 17:19  [ТС] 12
%)
0
2815 / 1406 / 107
Регистрация: 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;
}
3
0 / 0 / 0
Регистрация: 11.03.2009
Сообщений: 38
12.03.2009, 08:14  [ТС] 14
Don Corleone, Спасибо теперь что-то получается, думаю теперь смогу разобраться
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2009, 08:14
Помогаю со студенческими работами здесь

Динамические структуры данных. Односвязные списки
Вот код. #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;iostream&gt; using...

Динамические структуры: односвязные и двусвязные списки
всем привет, мне нужно 2 задачи решить на эту тему,а информации нигде найти не могу, подкиньте...

Динамические структуры данных. Односвязной и двосвязные списки
Дано указание Р0 на один из элементов непустого списка. вывести число N - количество элементов в...

Линейные списки
Ребят, подскажите в чем ошибка:( Компилятор не находит, а при запуске вылетает. Я подозреваю, что...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru