1 / 1 / 1
Регистрация: 11.12.2012
Сообщений: 16

Чем отличаются между собой стек очередь или список?

14.03.2013, 00:30. Показов 25360. Ответов 7

Author24 — интернет-сервис помощи студентам
Ребят,чем отличаются между собой стек очередь или список?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.03.2013, 00:30
Ответы с готовыми решениями:

Чем отличаются между собой 3 книги Шилдта по С++?
Читаю сейчас его книгу "Руководство для начинающих", дальше хотел прочитать ещё его две книги "Базовый курс" и "Полный...

Чем по сути отличаются между собой Static, Public и Private
Это Наиболее часто встречаемые спецификаторы при использовании методов. Объясните не так, как объясняют в лекциях, а так, чтобы реально...

Как отсортировать список книг, используя стек или очередь?
Добрый день! Уже не знаю сколько писал эту задачу и все никак. Условие: Пусть дан упорядоченный список названий книг. необходимо...

7
 Аватар для Mawrat
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
14.03.2013, 15:19
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Стек - механизм реализующий правило "первым вошёл - последним вышел". Английская аббревиатура правила: FILO - First In - Last Out. Элементы добавляются и изымаются с вершины стека.
Очередь - механизм реализующий правило "первым вошёл - первым вышел". Английская аббревиатура правила: FIFO - First In - First Out. Элементы добавляются в конец очереди, а изымаются - из начала.
Связанный список - структура, в которой каждый элемент содержит указатели на другие элементы списка (например, на предыдущий или (и) на следующий элемент в списке).
---
Здесь обращу внимание на то, что стек и очередь - это механизмы (данные + алгоритмы), а список - это структура (данные). Механизм подразумевает не только определённую структуру данных, но и наличие алгоритмов по обработке этих данных. Стек и очередь могут хранить данные в списке и при этом они должны иметь процедуры или функции для чтения и записи данных.
1
1 / 1 / 1
Регистрация: 11.12.2012
Сообщений: 16
14.03.2013, 21:55  [ТС]
а чем они различаются именно в коде?разница только в расположении указателе?
0
 Аватар для Mawrat
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
15.03.2013, 00:15
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Реализация очереди и стека на односвязанном динамическом списке. И проверка работы - показано, как при помощи стека поменять порядок следования элементов в очереди на обратный.
Pascal
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
program Project1;
 
type
  {Тип основных данных.}
  TData = Integer;
  {Тип указателя на элемент списка.}
  TPElem = ^TElem;
  {Тип элемента списка.}
  TElem = record
    Data : TData; {Основные данные.}
    PNext : TPElem; {Указатель на следующий элемент списка.}
  end;
  {Тип, описывающий очередь.}
  TQueue = record
    PFirst, PLast : TPElem; {Указатели на первый и на последний элементы очереди.}
  end;
  {Отдельный тип для стека описывать не будем. Стек будет представлен указателем
  на элемент, который расположен на вершине стека. Для этого достаточно типа TPElem.}
 
{------------------------------}
{Механизм очереди.}
{------------------------------}
 
{Начальная инициализация очереди. Внимание! Эту процедуру можно выполнять
только в отношении пустой очереди. Иначе будут утечки памяти.
Если очередь непуста, то следует применить вызов QFree().}
procedure QInit(var aQueue : TQueue);
begin
  aQueue.PFirst := nil;
  aQueue.PLast := nil;
end;
 
{Добавление элемента в конец очереди.}
procedure QPush(var aQueue : TQueue; const aData : TData);
var
  PNew : TPElem;
begin
  New(PNew);
  PNew^.Data := aData;
  PNew^.PNext := nil;
  if aQueue.PFirst = nil then
    aQueue.PFirst := PNew
  else
    aQueue.PLast^.PNext := PNew;
  aQueue.PLast := PNew;
end;
 
{Изъятие элемента из начала очереди. Если очередь не пуста, то
из начала очереди извлекается элемент и его значение возвращается
через параметр aData. В этом случае функция возвращает True.
Если очередь пуста, то операция отменяется и функция возвращает False.}
function QPop(var aQueue : TQueue; var aData : TData) : Boolean;
var
  PDel : TPElem;
begin
  QPop := False;
  if aQueue.PFirst = nil then Exit;
 
  PDel := aQueue.PFirst;
  aData := PDel^.Data;
  aQueue.PFirst := PDel^.PNext;
  if aQueue.PFirst = nil then aQueue.PLast := nil;
  Dispose(PDel);
  QPop := True;
end;
 
{Освобождение памяти, выделенной для очереди (очистка очереди).}
procedure QFree(var aQueue : TQueue);
var
  Data : TData;
begin
  while QPop(aQueue, Data) do;
end;
 
{------------------------------}
{Механизм стека.}
{------------------------------}
 
{Добавление элемента на вершину стека.}
procedure SPush(var aPStack : TPElem; const aData : TData);
var
  PNew : TPElem;
begin
  New(PNew);
  PNew^.Data := aData;
  PNew^.PNext := aPStack;
  aPStack := PNew;
end;
 
{Изъятие элемента с вершины стека. Если стек не пуст, то
с вершины стека извлекается элемент и его значение возвращается
через параметр aData. В этом случае функция возвращает True.
Если стек пуст, то операция отменяется и функция возвращает False.}
function SPop(var aPStack : TPElem; var aData : TData) : Boolean;
var
  PDel : TPElem;
begin
  SPop := False;
  if aPStack = nil then Exit;
 
  aData := aPStack^.Data;
  PDel := aPStack;
  aPStack := aPStack^.PNext;
  Dispose(PDel);
  SPop := True;
end;
 
{Освобождение памяти, выделенной для стека (очистка стека).}
procedure SFree(var aPStack : TPElem);
var
  Data : TData;
begin
  while SPop(aPStack, Data) do;
end;
 
{------------------------------}
{Общие процедуры.}
{------------------------------}
 
{Распечатка списка, очереди или стека. Распечатка выполняется в направлении:
Список: начало - конец.
Очередь: начало - конец.
Стек: вершина - дно.}
procedure LWriteln(aPFirst : TPElem);
var
  i : Integer;
begin
  i := 0;
  while aPFirst <> nil do begin
    Inc(i);
    if i > 1 then Write(', ');
    Write(aPFirst^.Data);
    aPFirst := aPFirst^.PNext;
  end;
  if i = 0 then
    Writeln('Нет элементов.')
  else
    Writeln;
end;
 
const
  M = 10;
var
  Q : TQueue;
  PSt : TPElem;
  Data : TData;
  i : Integer;
  S : String;
begin
  {Начальная инициализация очереди и стека.}
  QInit(Q);
  PSt := nil;
 
  repeat
    {Записываем в очередь некоторое количество элементов.}
    Randomize;
    for i := 1 to 5 + Random(M + 1) do QPush(Q, i);
 
    Writeln('------------------------------');
    Writeln('Начальное состояние.');
    Write('Очередь: ');
    LWriteln(Q.PFirst);
    Write('Стек: ');
    LWriteln(PSt);
    Writeln;
 
    {Переливаем элементы из очереди в стек.}
    while QPop(Q, Data) do SPush(PSt, Data);
 
    Writeln('Состояние после переливания элементов из очереди в стек.');
    Write('Очередь: ');
    LWriteln(Q.PFirst);
    Write('Стек: ');
    LWriteln(PSt);
    Writeln;
 
    {Переливаем элементы обратно - из стека в очередь.}
    while SPop(PSt, Data) do QPush(Q, Data);
 
    Writeln('Состояние после переливания элементов из стека в очередь.');
    Write('Очередь: ');
    LWriteln(Q.PFirst);
    Write('Стек: ');
    LWriteln(PSt);
    Writeln;
 
    {Освобождаем память, занятую под очередь и стек.}
    QFree(Q);
    SFree(PSt);
    Writeln('Память, выделенная для очереди и стека, освобождена.');
    Writeln;
 
    Writeln('Повторить - Enter, выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
1
1 / 1 / 1
Регистрация: 11.12.2012
Сообщений: 16
21.03.2013, 20:19  [ТС]
а если не секрет,то от куда информация и где можно почитать?
0
 Аватар для Mawrat
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
21.03.2013, 21:38
В сети можно материалы найти. Например, в поисковике, по фразе: "Pascal стек очередь дек".
Например, здесь: http://www.239.ru/userfiles/%D... 8C_(1).doc
А саму реализацию стека и очереди лучше взять из моего кода.
Ещё здесь: Динамические структуры данных (списки, очереди, стеки, деревья)
1
1 / 1 / 1
Регистрация: 11.12.2012
Сообщений: 16
21.03.2013, 21:47  [ТС]
спасибо,как всегда помог!
0
 Аватар для Mawrat
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
21.03.2013, 22:55
GoSh, ещё посоветую одну очень хорошую книгу. Её можно на просторах инета найти и закачать (бесплатно):
Альфред В. Ахо, Джон Э. Хопкрофт, Джеффри Д. Ульман - "Структуры данных и алгоритмы"
Вообще, если встретишь где-то книги этих авторов - закачивай - это классика программирования и алгоритмизации.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.03.2013, 22:55
Помогаю со студенческими работами здесь

Сформировать динамический список (стек или очередь), считая, что длина списка (количество элементов) задана
Сформировать динамический список (стек или очередь), считая, что длина списка (количество элементов) задана. Описать функцию, которая...

Список, стек и очередь.
Файл содержит вещественные числа. Нужно удвоит вхождение всех чисел N. Решить с помощью стека, списка и очереди в С++. Вся информация...

Список, очередь и стек.
Решить одну и ту же задачу, организуя список, очередь и стек. В поле данных каждого элемента списка записываются данные о студентах::...

Стек, Очередь, Двусвязный список
сначала нужно сформировать и заполнить элементами три структуры – «стек», «очередь», «двусвязный список». Для проверки вывести их на экран)...

Стек, очередь и двусвязный список
Решить для случая реализации списка в виде стека, очереди и двусвязного списка: Разработать процедуры и функции, предварительно выбрав...


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

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

Новые блоги и статьи
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
Взаимодействие Python с REST API
py-thonny 27.03.2025
REST API - это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Python располагает функциональным набором инструментов для работы с REST API и основная библиотека для. . .
sshd restrictions, ssh access limitations
jigi33 26.03.2025
sshd restrictions | ssh access limitations рестрикции доступа на сервер sshd статья: https:/ / www. golinuxcloud. com/ restrict-allow-ssh-certain-users-groups-rhel
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточное программировани­е в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru