С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 265, средняя оценка - 4.79
Vasiliusis
41 / 41 / 2
Регистрация: 14.10.2008
Сообщений: 131
#1

Односвязный, двусвязный список, стек, очередь - C++

11.12.2008, 16:14. Просмотров 34359. Ответов 34
Метки нет (Все метки)

Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
В общем, всем кто нуждается. Баггов вы не найдете.

Односвязный список
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
#include <iostream>
#include <windows.h>
using namespace std;
 
class Node
{
public:
    int number;
    Node* next;
};
 
void russia(const char*);
 
void main()
{
    Node* head = NULL;
    Node* lastPtr = NULL;
    short action = -1;
    while (1)
    {
        russia("1. Добавить Элемент\n");
        russia("2. Просмотр Списка\n");
        russia("3. Поиск Элемента\n");
        russia("4. Удалить Элемент\n");
        russia("5. Удалить Элемент По Выбору\n");
        russia("0. Выход\n\n");
        russia("Ваш Выбор: ");
        cin>>action;
        if (action == 0)
        {
            system("CLS");
            break;
        }
 
        if (action == 1)
        {
            system("CLS");
            Node* ptr = new Node;
            int numb = -1;
            russia("Введите Число: ");
            cin>>numb;
            ptr->number = numb;
            ptr->next = NULL;
            if (head == 0)
            {
                head = ptr;
                lastPtr = ptr;
                system("CLS");
                continue;
            }
            lastPtr->next = ptr;
            lastPtr = ptr;
            system("CLS");
            continue;
        }
 
        if (action == 2)
        {
            Node* ptr = NULL;
            system("CLS");
            if (head == NULL)
            {
                russia("\t!!! СПИСОК ПУСТ !!!\n\n");
                system("PAUSE");
                system("CLS");
                continue;
            }
            russia("* * * * * СПИСОК * * * * *\n\n");
            ptr = head;
            while (1)
            {
                cout<<ptr->number<<" ";
                if (ptr->next == 0)
                    break;
                ptr = ptr->next;
            }
            cout<<"\n\n";
            system("PAUSE");
            system("CLS");
            continue;
        }
 
        if (action == 3)
        {
            Node* ptr = NULL;
            int key = -1;
            system("CLS");
            if (head == NULL)
            {
                russia("\t!!! СПИСОК ПУСТ !!!\n\n");
                system("PAUSE");
                system("CLS");
                continue;
            }
            russia("Введите Элемент Для Поиска: ");
            cin>>key;
            ptr = head;
            while (1)
            {
                if (key == ptr->number)
                {
                    russia("\n\t!!! ЭЛЕМЕНТ НАЙДЕН !!!\n");
                    break;
                }
                if (ptr->next == NULL)
                {
                    russia("\n\t!!! ЭЛЕМЕНТ НЕ НАЙДЕН !!!\n");
                    break;
                }
                ptr = ptr->next;
            }
            system("PAUSE");
            system("CLS");
            continue;
        }
 
        if (action == 4)
        {
            system("CLS");
            Node* ptrDelete = NULL;         
            if (head == NULL)
            {
                russia("\t!!! СПИСОК ПУСТ !!!\n\n");
                system("PAUSE");
                system("CLS");
                continue;
            }
            if (head->next == NULL)
            {
                head = NULL;
                delete head;
                continue;
            }
            ptrDelete = head;
            head = ptrDelete->next;
            delete ptrDelete;
            continue;
        }
 
        if (action == 5)
        {
            system("CLS");
            Node* ptrPrev = NULL;
            Node* ptrDelete = NULL;
            int key = -1;
            if (head == NULL)
            {
                russia("\t!!! СПИСОК ПУСТ !!!\n\n");
                system("PAUSE");
                system("CLS");
                continue;
            }
            russia("Введите Элемент Для Удаления: ");
            cin>>key;
            ptrDelete = head;
            if (ptrDelete->number == key)
            {
                head = ptrDelete->next;
                delete ptrDelete;
                system("CLS");
                continue;
            }
            while (1)
            {
                if (key == ptrDelete->number)
                {
                    ptrPrev->next = ptrDelete->next;
                    delete ptrDelete;
                    break;
                }
                if (ptrDelete->next == 0)
                {
                    russia("\n\t!!! ЭЛЕМЕНТ НЕ НАЙДЕН !!!\n");
                    system("PAUSE");
                    break;
                }
                ptrPrev = ptrDelete;
                ptrDelete = ptrDelete->next;
            }
            system("CLS");
            continue;
        }
 
        if (action > 5)
        {
            system("CLS");
            russia("\t!!! НЕВЕРНЫЙ ВЫБОР. ПОВТОРИТЕ ВВОД !!!\n\n");
            system("PAUSE");
            system("CLS");
            continue;
        }
    }   
}
 
void russia(const char* rus)
{
    char word[100];
    CharToOem(rus, word);
    cout<<word;
}
Двусвязный список
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
#include <iostream>
#include <windows.h>
using namespace std;
 
class Node
{
public:
    int number;
    Node* next;
    Node* last;
};
 
void russia(const char*);
 
void main()
{
    short action = -1;
    Node* head = NULL;
    Node* tail = NULL;
    Node* ptrLast = NULL;
 
    while (1)
    {       
        russia("1. Добавить Элемент\n");
        russia("2. Просмотр Списка Слева Направо\n");
        russia("3. Просмотр Списка Справа Налево\n");
        russia("4. Удалить Голову\n");
        russia("5. Удалить Хвост\n");
        russia("6. Поиск Элемента\n");
        russia("0. Выход\n\n");
        russia("Ваш Выбор: ");
        cin>>action;
 
        if (action == 0)
        {
            system("CLS");
            break;
        }
 
        if (action == 1)
        {
            system("CLS");
            int numb = -1;
            russia("Введите Число: ");
            cin>>numb;
            Node* ptr = new Node;
            ptr->number = numb;
            ptr->next = NULL;
            tail = ptr;
            if (head == NULL)
            {
                head = ptr;
                ptrLast = ptr;
                ptr->last = NULL;
                system("CLS");
                continue;
            }
            ptr->last = ptrLast;
            ptrLast->next = ptr;
            ptrLast = ptr;
            system("CLS");
            continue;
        }
 
        if (action == 2)
        {
            system("CLS");
            Node* ptr = NULL;
            if (head == NULL)
            {
                russia("\t!!! СПИСОК ПУСТ !!!\n\n");
                system("PAUSE");
                system("CLS");
                continue;
            }
            russia("* * * * * СПИСОК: СЛЕВА НАПРАВО * * * * *\n\n");
            ptr = head;
            while (1)
            {
                cout<<ptr->number<<" ";
                if (ptr->next == 0)
                    break;
                ptr = ptr->next;
            }
            cout<<"\n\n";
            system("PAUSE");
            system("CLS");
            continue;
        }
 
        if (action == 3)
        {
            system("CLS");
            Node* ptr = NULL;           
            if (head == NULL)
            {
                russia("\t!!! СПИСОК ПУСТ !!!\n\n");
                system("PAUSE");
                system("CLS");
                continue;
            }
            russia("* * * * * СПИСОК: СПРАВА НАЛЕВО * * * * *\n\n");
            ptr = tail;
            while (1)
            {
                cout<<ptr->number<<" ";
                if (ptr->last == 0)
                    break;
                ptr = ptr->last;
            }
            cout<<"\n\n";
            system("PAUSE");
            system("CLS");
            continue;
        }
 
        if (action == 4)
        {
            system("CLS");
            Node* ptrDelete = NULL;         
            if (head == NULL)
            {
                russia("\t!!! СПИСОК ПУСТ !!!\n\n");
                system("PAUSE");
                system("CLS");
                continue;
            }
            if (head->next == NULL)
            {
                head = NULL;
                tail = NULL;
                delete head;
                continue;
            }
            ptrDelete = head;
            head = ptrDelete->next;
            head->last = NULL;
            delete ptrDelete;
            continue;
        }
 
        if (action == 5)
        {
            system("CLS");
            Node* ptrDelete = NULL;
            if (tail == NULL)
            {
                russia("\t!!! СПИСОК ПУСТ !!!\n\n");
                system("PAUSE");
                system("CLS");
                continue;
            }
            if (tail->last == NULL)
            {
                head = NULL;
                tail = NULL;
                delete tail;
                continue;
            }           
            ptrDelete = tail;
            tail = ptrDelete->last;
            tail->next = NULL;
            ptrLast = tail;
            delete ptrDelete;
            continue;
        }
 
        if (action == 6)
        {
            system("CLS");
            Node* ptr = NULL;
            int key = -1;
            if (head == NULL)
            {
                russia("\t!!! СПИСОК ПУСТ !!!\n\n");
                system("PAUSE");
                system("CLS");
                continue;
            }
            russia("Введите Элемент Для Поиска: ");
            cin>>key;           
            ptr = head;
            while (1)
            {
                if (key == ptr->number)
                {
                    russia("\n\t!!! ЭЛЕМЕНТ НАЙДЕН !!!\n");
                    break;
                }
                if (ptr->next == NULL)
                {
                    russia("\n\t!!! ЭЛЕМЕНТ НЕ НАЙДЕН !!!\n");
                    break;
                }
                ptr = ptr->next;
            }
            system("PAUSE");
            system("CLS");
            continue;
        }
 
        if (action > 6)
        {
            system("CLS");
            russia("\t!!! НЕВЕРНЫЙ ВЫБОР. ПОВТОРИТЕ ВВОД !!!\n\n");
            system("PAUSE");
            system("CLS");
            continue;
        }
    }
}
 
void russia(const char* rus)
{
    char word[100];
    CharToOem(rus, word);
    cout<<word;
}
Стек
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
141
142
143
144
#include <iostream>
#include <windows.h>
using namespace std;
 
class Node
{
public:
    int number;
    Node* last;
};
 
void russia(const char*);
 
void main()
{
    Node* ptrLast = NULL;
    Node* top = NULL;
    short action = -1;
 
    while (1)
    {
        russia("1. Затолкнуть В Стек\n");
        russia("2. Вытолкнуть Из Стека\n");
        russia("3. Вершина Стека\n");
        russia("4. Содержимое Стека\n");
        russia("0. Выход\n\n");
        russia("Ваш Выбор: ");
        cin>>action;        
 
        if (action == 0)
        {
            system("CLS");
            break;
        }
 
        if (action == 1)
        {
            system("CLS");
            int numb = -1;          
            russia("Введите Число: ");
            cin>>numb;
            Node* ptr = new Node;
            ptr->number = numb;         
            if (top == NULL)
            {
                ptr->last = NULL;
                top = ptr;
                ptrLast = ptr;
                system("CLS");
                continue;
            }
            top = ptr;
            ptr->last = ptrLast;
            ptrLast = ptr;
            system("CLS");
            continue;
        }
 
        if (action == 2)
        {
            system("CLS");
            Node* ptrDelete = NULL;
            if (top == NULL)
            {
                russia("\t!!! СТЕК ПУСТ !!!\n\n");
                system("PAUSE");
                system("CLS");
                continue;
            }           
            ptrDelete = top;
            if (ptrDelete->last == NULL)
            {
                top = NULL;
                delete ptrDelete;
                system("CLS");
                continue;
            }
            top = ptrDelete->last;
            ptrLast = top;
            delete ptrDelete;
            continue;
        }
 
        if (action == 3)
        {
            system("CLS");
            if (top == NULL)
            {
                russia("\t!!! СТЕК ПУСТ !!!\n\n");
                system("PAUSE");
                system("CLS");
                continue;
            }
            russia("Вершина Стека: ");
            cout<<top->number<<"\n\n";
            system("PAUSE");
            system("CLS");
            continue;
        }
 
        if (action == 4)
        {
            system("CLS");
            Node* ptr = NULL;
            if (top == NULL)
            {
                russia("\t!!! СТЕК ПУСТ !!!\n\n");
                system("PAUSE");
                system("CLS");
                continue;
            }
            russia("* * * * * СОДЕРЖИМОЕ СТЕКА * * * * *\n\n");
            ptr = top;
            while (1)
            {
                cout<<ptr->number<<endl;
                if (ptr->last == NULL)
                {
                    system("PAUSE");
                    system("CLS");
                    break;
                }
                ptr = ptr->last;
            }
        }
 
        if (action > 4)
        {
            system("CLS");
            russia("\t!!! НЕВЕРНЫЙ ВЫБОР. ПОВТОРИТЕ ВВОД !!!\n\n");
            system("PAUSE");
            system("CLS");
            continue;
        }
 
    }
}
 
void russia(const char* rus)
{
    char word[100];
    CharToOem(rus, word);
    cout<<word;
}
Очередь
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#include <iostream>
#include <windows.h>
using namespace std;
 
class Node
{
public:
    int number;
    Node* last;
    Node* next;
};
 
void russia(const char*);
 
void main()
{
    Node* head = NULL;
    Node* tail = NULL;
    Node* ptrLast = NULL;
    short action = -1;
 
    while(1)
    {
        russia("1. Добавить Элемент\n");
        russia("2. Просмотр Очереди\n");
        russia("3. Удалить Элемент\n");
        russia("4. Поиск Элемента\n");
        russia("0. Выход\n\n");
        russia("Ваш Выбор: ");
        cin>>action;
 
        if (action == 0)
        {
            system("CLS");
            break;
        }
 
        if (action == 1)
        {
            system("CLS");
            int numb = -1;
            russia("Введите Число: ");
            cin>>numb;
            Node* ptr = new Node;
            ptr->number = numb;
            ptr->next = NULL;
            tail = ptr;
            if (head == NULL)
            {
                head = ptr;
                ptrLast = ptr;
                ptr->last = NULL;
                system("CLS");
                continue;
            }
            ptr->last = ptrLast;
            ptrLast->next = ptr;
            ptrLast = ptr;
            system("CLS");
            continue;
        }
 
        if (action == 2)
        {
            system("CLS");
            Node* ptr = NULL;           
            if (head == NULL)
            {
                russia("\t!!! ОЧЕРЕДЬ ПУСТА !!!\n\n");
                system("PAUSE");
                system("CLS");
                continue;
            }
            russia("* * * * * ОЧЕРЕДЬ * * * * *\n\n");
            ptr = tail;
            while (1)
            {
                cout<<ptr->number<<" ";
                if (ptr->last == 0)
                    break;
                ptr = ptr->last;
            }
            cout<<"\n\n";
            system("PAUSE");
            system("CLS");
            continue;
        }
 
        if (action == 3)
        {
            system("CLS");
            Node* ptrDelete = NULL;
            if (head == NULL)
            {
                russia("\t!!! ОЧЕРЕДЬ ПУСТА !!!\n\n");
                system("PAUSE");
                system("CLS");
                continue;
            }
            if (head->next == NULL)
            {
                head = NULL;
                tail = NULL;
                delete tail;
                continue;
            }           
            ptrDelete = head;
            head = ptrDelete->next;
            head->last = NULL;
            delete ptrDelete;
            continue;
        }
 
        if (action == 4)
        {
            system("CLS");
            Node* ptr = NULL;
            int key = -1;
            if (head == NULL)
            {
                russia("\t!!! СПИСОК ПУСТ !!!\n\n");
                system("PAUSE");
                system("CLS");
                continue;
            }
            russia("Введите Элемент Для Поиска: ");
            cin>>key;           
            ptr = head;
            while (1)
            {
                if (key == ptr->number)
                {
                    russia("\n\t!!! ЭЛЕМЕНТ НАЙДЕН !!!\n");
                    break;
                }
                if (ptr->next == NULL)
                {
                    russia("\n\t!!! ЭЛЕМЕНТ НЕ НАЙДЕН !!!\n");
                    break;
                }
                ptr = ptr->next;
            }
            system("PAUSE");
            system("CLS");
            continue;
        }
 
        if (action > 4)
        {
            system("CLS");
            russia("\t!!! НЕВЕРНЫЙ ВЫБОР. ПОВТОРИТЕ ВВОД !!!\n\n");
            system("PAUSE");
            system("CLS");
            continue;
        }
    }
}
 
void russia(const char* rus)
{
    char word[100];
    CharToOem(rus, word);
    cout<<word;
}
Пользуйтесь, наздоровье
35
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2008, 16:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Односвязный, двусвязный список, стек, очередь (C++):

Реализовать классы «стек» и «очередь» наследованием от базового класса «двусвязный список» - C++
Всем добрый вечер! Помогите пожалуйста с лабораторной работой, дело в том что скоро сдавать, а я в С++ новичок. и совсем не понимаю как это...

Создать двусвязный список групп факультета, где каждая группа представляет собой односвязный список студентов - C++
Задание: создайте двусвязный список групп факультета. Каждая группа представляет собой односвязный список студентов. Помогите пожалуйста,...

Двусвязный в односвязный список - C++
Добрый день.Помогите,пожалуйста,переделать программу,обрабатывающую двухсвязный список,для обработки односвязного списка. :( Листинг: ...

Преобразовать односвязный список в двусвязный - C++
Нужна помощь в написании следующей программы: Дана односвязная цепочка и указатель на ее первый элемент, нужно преобразовать данную цепочку...

Преобразовать односвязный список в двусвязный - C++
Привет всем!) У меня проблема такого плана: есть односвязный список: //------вспомогательный класс-------// class elemspiska ...

Возможно ли как-то переделать односвязный список в двусвязный? - C++
Собственно вопрос в названии. Возможно ли переделать односвязный список в двусвязный? Или проще написать программу наново? Вот сама...

34
dpi
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 2
02.05.2009, 14:20 #16
Цитата Сообщение от real199007 Посмотреть сообщение
СЛУШАЙ Vasiliusis А ТЫ МОЖЕШЬ В ОДНОСВЯЗАННОМ СПИСКЕ СОРТИРОВКУ ПО ВОЗРАСТАНИЮ ИЛИ УБЫВАНИЮ СДЕЛАТЬ

Добавлено через 6 минут 21 секунду
Vasiliusis, А ТЫ МОЖЕШЬ В ОДНОСВЯЗАННОМ СПИСКЕ СОРТИРОВКУ ПО ВОЗРАСТАНИЮ ИЛИ УБЫВАНИЮ СДЕЛАТЬ
Используй класс:
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
#include<iostream.h>
class Spisok
{
  private:
    struct node
      {
        int elem; 
        node *sled;
      } *phead; //Указатель на начало списка.
  public: 
    Spisok() {phead = new (node); (*phead).sled=NULL;} //Конструктор.
    ~Spisok() { delete phead; } //Деструктор.
    void POSTROENIE (); 
    void VYVOD (); 
    void OCHISTKA ();
}; 
 
int main ()
{
  Spisok A;
 
  A.POSTROENIE ();
  A.VYVOD ();
  A.OCHISTKA ();
  return 0;
} 
 
void Spisok::POSTROENIE ()
//Построение однонаправленного списка с заглавным звеном.
// phead - указатель на заглавное звено списка. 
{
  node *t;
  int el;
  t = phead;
  cout<< "Вводите элементы списка: ";
  cin>>el;
  while (el!=0)
  { 
    (*t).sled = new (node); 
    t = (*t).sled; (*t).elem = el; (*t).sled = NULL; 
    cin>>el;
  }
} 
 
void Spisok::VYVOD ()
//Вывод содержимого однонаправленного линейного списка
//с заглавным звеном.
// phead - указатель на заглавное звено списка.
{
  node *t;
  t = (*phead).sled; 
  cout<<"Список: ";
  while (t!=NULL)
  { 
    cout<<(*t).elem<<" "; 
    t = (*t).sled;
  }
  cout<<endl;
} 
 
void Spisok::OCHISTKA ()
//Удаление однонаправленного списка из памяти.
// phead - указатель на заглавное звено списка.
{
  node *q,*q1;// Рабочие указатели.
 
  q = phead;
  q1 = (*q).sled; // Указатель q1 "опережает" указатель q.
  while (q1!=NULL)
  { q = q1; q1 = (*q1).sled; delete q;}
}
0
real199007
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 2
02.05.2009, 19:26 #17
dpi,
слушай я в С++ не бум бум
вот в верху есть Односвязный список построенный Vasiliusis
ты можешь туда запихнуть сортировку

dpi, вот в верху есть Односвязный список построенный Vasiliusis
ты можешь туда запихнуть сортировку
0
grom
1 / 1 / 0
Регистрация: 09.02.2009
Сообщений: 31
20.05.2009, 20:55 #18
а кто нибудь знает как насследованием из класса стек сделать дек
0
NAG
8 / 8 / 1
Регистрация: 15.03.2009
Сообщений: 267
14.10.2009, 19:41 #19
а как "очередь" будет "звучать"(написано) на СИ, а не Си++?
А то в Си я не очень силен. Если, кто может, то переделйте)
0
apis1
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 2
22.12.2009, 14:42 #20
Цитата Сообщение от Vasiliusis Посмотреть сообщение
В общем, всем кто нуждается. Баггов вы не найдете.
Пользуйтесь, наздоровье
да спасибо
очередь пошла на DEVCPP как дети в школу
только int main потребовала

а зачем здесь windows.h?
0
Ксюшк@
0 / 0 / 0
Регистрация: 02.06.2010
Сообщений: 17
07.06.2010, 22:42 #21
а в чем разница этих двух строчек?
lastPtr->next = ptr;
lastPtr = ptr;
Обьясните,плиз)
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
08.06.2010, 02:09 #22
lastPtr - указатель на последний элемент списка
следующий за ним элемент поначалу равен NULL
ptr - новый узел, который добавляется
нужно добавить его после последнего элемента

когда ptr добавлен после lastPtr, lastPtr указывает на предпоследний элемент
поэтому переставляем указатель lastPtr на последний элемент

в ptr->next записан NULL, поэтому после перестановки lastPtr на ptr lastPtr->next даст NULL
1
Ксюшк@
0 / 0 / 0
Регистрация: 02.06.2010
Сообщений: 17
08.06.2010, 10:19 #23
Почему,когда я пытаюсь присвоить элементу какое-то значение,например
ptr->name="ivanov" он мне выводит ошибку "Cannot convert 'char *' to 'char'?
А если в самой структуре написать name[10], то выдает "Lvalue required".
Как сделать так,чтобы он присваивал имя длиннее одного символа?
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
08.06.2010, 10:31 #24
C
1
2
3
4
5
6
7
8
9
10
11
12
13
struct node {
    char name[10];
    struct node *next;
};
 
...
 
    struct node n, *ptr;
 
    ptr = &n;
 
    strcpy(ptr->name, "ivanov");
    ptr->next = NULL;
для strcpy() нужно сделать #include <string.h>
если C++, #include <cstring>

Добавлено через 2 минуты
ещё бывает так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
struct node {
    char *name;
    struct node *next;
};
 
...
 
    struct node n, *ptr;
 
    ptr = &n;
 
    ptr->name = "ivanov";
    ptr->next = NULL;
во втором случае строку нельзя видоизменить (она является строковой константой)
0
Ксюшк@
0 / 0 / 0
Регистрация: 02.06.2010
Сообщений: 17
08.06.2010, 10:36 #25
А что означает
ptr = &n;?мы ведь потом это n нигде не используем.
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
09.06.2010, 01:33 #26
n используется, доступ к нему осуществляется с помощью указателя ptr
указатель ничего из себя не представляет, это переменная, которая может хранить только адрес чего-нибудь
1
megabobik
0 / 0 / 0
Регистрация: 15.01.2010
Сообщений: 45
10.06.2010, 08:10 #27
Можете помочь с такой задачей ?

Построить односвязный список, в котором каждый елемент поле связи спредыдущим или следующим елементом елементом списка. Определить количество узлов списка. Найти узел с заданым значением и напечатать его порядковый номер.
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
10.06.2010, 08:41 #28
C
1
2
3
4
struct node {
    int num;
    struct node *next;
};
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    struct node *list; /* указатель на первый узел списка */
    struct node n1, n2, n3, n4; /* это разные узлы */
    
    list = &n1;
    list->next = &n2;
    list->next->next = &n3;
    list->next->next->next = &n4;
    
    /* список готов, в нём четыре узла */
 
    list->num = 1;
    list->next->num = 2;
    list->next->next->num = 3;
    list->next->next->next->num = 4;
 
    /* занесли значения в каждый узел */
 
    /* дальше список можно выводить, считать количество элементов */
 
    list->next->next->next->next = NULL; /* конец списка */
    
    /* пятого узла нет, он равен NULL */
0
megabobik
0 / 0 / 0
Регистрация: 15.01.2010
Сообщений: 45
10.06.2010, 19:43 #29
Цитата Сообщение от accept Посмотреть сообщение
C
1
2
3
4
struct node {
    int num;
    struct node *next;
};
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    struct node *list; /* указатель на первый узел списка */
    struct node n1, n2, n3, n4; /* это разные узлы */
    
    list = &n1;
    list->next = &n2;
    list->next->next = &n3;
    list->next->next->next = &n4;
    
    /* список готов, в нём четыре узла */
 
    list->num = 1;
    list->next->num = 2;
    list->next->next->num = 3;
    list->next->next->next->num = 4;
 
    /* занесли значения в каждый узел */
 
    /* дальше список можно выводить, считать количество элементов */
 
    list->next->next->next->next = NULL; /* конец списка */
    
    /* пятого узла нет, он равен NULL */
Ето мне ?
0
hexvoltt
18 / 18 / 2
Регистрация: 17.08.2010
Сообщений: 54
17.08.2010, 15:24 #30
Случайно наткнулся на эту тему, рыская в инете по поводу списков на C++
> Баггов вы не найдёте
C++
1
2
                                tail = NULL;
                                delete tail;
Это что за ересь??
Недостатки кода: следовало бы сделать полноценную инкапсуляцию в классы, а сами классы шаблонными.
0
17.08.2010, 15:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2010, 15:24
Привет! Вот еще темы с ответами:

Создать динамический односвязный или двусвязный список - C++
Помогите, как создать динамический односвязный или двусвязный список(Описать структуру). Я не могу понять, чем он отличается от обычного...

Односвязный (двусвязный) список - поиск людей по минимальному и максимальному возрасту - C++
Здравствуйте форумчане. Имеется задание: Для структуры из Вашего варианта работы 6 сформировать динамический односвязный или двусвязный...

Реализовать иерархию классов, включающую в себя односвязный и двусвязный список - C++
Нужно реализовать иерархию классов, включающую в себя односвязный и двусвязный список. При компиляции программа выдает ошибку:&quot;Ошибка 1...

Стек (односвязный список) - C++
Нужно реализовать операции работы со стеком(продвижение, вставка, удаление), хочется понять реализацию продвижения, а вставку и удаление...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.