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

Как работают списки и как их создать вообще? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Увеличить BMP изображение в два раза http://www.cyberforum.ru/cpp-beginners/thread879815.html
Дано задание увеличить 8-битное BMP изображение в два раза. Функцию реализовать в классе. После некоторых размышлений получился сий код=) Подскажите, что тут не так, потому что изображение не увеличивается, хоть ты тресни=( void BMP::x2_zoom() { unsigned int n = this->BMIH.biWidth; unsigned int m = this->BMIH.biHeight; unsigned int _new_n = this->BMIH.biWidth * 2; unsigned int _new_m...
C++ Описать класс с именем MARSH 1. Описать класс с именем MARSH, содержащий следующие поля: • название начального пункта маршрута; • название конечного пункта маршрута; • номер маршрута. 2. Включить методы, выполняющие следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа mARSH; записи должны быть упорядочены по номерам маршрутов; • вывод на экран информации о маршруте, номер... http://www.cyberforum.ru/cpp-beginners/thread879812.html
Найти ошибку в перегрузке копиконструктора и операторов C++
Вот код. в QT отлично работает. а в Visual Studio выдает ошибку на строке (a+b).show(); помогите понять в чем проблема. #include <iostream> using namespace std; struct vec {double x,y,z;}; class arr_vec { private: double *x; double *y; //указатели на координаты
C++ чтение матрицы из файла
Здравствуйте. Помогите, пожалуйста сделать запрос в самом начале программы(считать из файла или ввести вручную) и организовать само считывание вот текст программы #include <iostream> #include <iomanip> #include <ctime> #include <cmath> #include <iomanip> #include <fstream> #include <conio.h>
C++ Класс "Точка". Функция - определение в каком координатном угле находится точка http://www.cyberforum.ru/cpp-beginners/thread879762.html
1. Определить в глобальной области видимости функцию в соответствии с вариантом. Доступ к полям класса осуществить с помощью соответствующих методов класса; 2. Определить дружественную функцию с аналогичной функциональностью; 3. В функции main вывести на экран результаты работы обеих функций для заданного объекта (номер объекта в массиве вводится с клавиатуры). Результаты работы функций должны...
C++ Из нерассортированного списка целых чисел удалить все наибольшие элементы, оставив первый из них Доброго времени суток. Никак не могу сделать эти задания(( Буду премного благодарен тому, кто поможет мне хоть с одной из них! Из нерассортированного списка целых чисел удалить все наибольшие элементы, оставив первый из них. Выручите плиз! Очень нужны эти задачи! подробнее

Показать сообщение отдельно
Nullik
 Аватар для Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 297
Завершенные тесты: 1
27.05.2013, 14:04  [ТС]     Как работают списки и как их создать вообще?
Tulosba, допустим:


Этот код был взят с сайта: ССЫЛКА на статью


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
#include <iostream>
#include <cstdlib>
using namespace std;
 
struct STACK {
int info; 
STACK *next;
};
 
int Empty(STACK *pstack)
{
if (pstack==NULL) 
return 0; 
else 
return 1;
}
 
void Add(STACK **pstack)
{
STACK *tmp = new STACK; 
tmp->info=rand()%100; 
tmp->next=*pstack; 
*pstack=tmp;
}
 
void Del(STACK **pstack)
{
STACK *tmp=*pstack; 
*pstack=(*pstack)->next; 
delete tmp;
}
 
void Show(STACK *pstack)
{
STACK *tmp=pstack; 
while(tmp!=NULL) 
{ 
cout << tmp->info << " "; 
tmp=tmp->next; 
}
}
 
void ClearAll(STACK **pstack)
{
STACK *tmp; 
while(*pstack!=NULL) 
{ 
tmp=*pstack; 
*pstack=(*pstack)->next; 
delete tmp; 
}
}
 
int main()
{
setlocale(LC_ALL,"Russian"); 
STACK *stack=NULL; 
int num; 
char otv; 
do 
{ 
cout << "1. Добавление элементов в вершину стека" << endl 
<< "2. Удаление элемента из вершины стека" << endl 
<< "3. Вывод элементов" << endl 
<< "0. Выход" << endl; 
cout << " = "; 
cin >> otv; 
switch(otv) 
{ 
case1′: 
cout << endl << "Сколько элементов добавить" << endl; 
cin >> num; 
for ( int i=0;i<num;i++) 
Add(&stack); 
cout << endl << "Элементы добавлены" << endl; 
break;
case2′:
if (Empty(stack)==0) 
cout << endl << "Стек пуст" << endl; 
else 
{ 
Del(&stack); 
cout << endl << "Элемент удален из вершины стека" << endl; 
} 
break;
case3′:
if (Empty(stack)==0) 
cout << endl << "Стек пуст" << endl; 
else 
{ 
cout << endl << "Элементы стека:" << endl; 
Show(stack); 
cout << endl; 
} 
break;
case0′:
ClearAll(&stack); 
break; 
default: 
cout << endl << "Ошибка" << endl; 
break;
}
 
}while(otv!=0′);
cin.get();
 
}

Вот здесь, вроде бы, полный такой пример. Что должен уметь делать этот список. Вообще, мне как бы стек надо было сделать, у меня есть стек, но я в упор не понимаю списки. Ахахаха, бывает))))

Но я хочу сказать, что вы вот сказали:

Нужно взять "голову" списка и пройтись через next до последнего эл-та (у которого next==NULL).
Потом установить next на добавляемый элемент (у которого снова next должен быть равен NULL).
Вот и всё.
и
т.е. для добавляемого эл-та pTemp не существует следующего, ведь мы добавляем в конец списка.
И сейчас меня осенила мысль, что это действительно легко и просто!

Вот, если вам не трудно, давайте разберём функцию добавления элемента:

C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <cstdlib>
using namespace std;
 
struct STACK {
int info; 
STACK *next;
};
Объявили этот список

C++
1
2
3
4
5
6
int main()
{
STACK *stack=NULL; // настроили указатель, на "несуществование элемента дальше"
Add(&stack); // вызвали функцию для добавления в список. Взяли указатель (ссылку на указатель), у которого NULL значение.
cin.get();
}
C++
1
2
3
4
5
6
7
void Add(STACK **pstack) // ? в скобках..
{
STACK *tmp = new STACK; 
tmp->info=rand()%100; 
tmp->next=*pstack; 
*pstack=tmp;
}
 
Текущее время: 11:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru