Форум программистов, компьютерный форум 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
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;
}
 
Текущее время: 05:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru