Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
6 / 10 / 2
Регистрация: 29.05.2015
Сообщений: 661

Чем стек программно от очереди отличается?

22.04.2017, 20:06. Показов 5821. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Чем стек программно от очереди отличается?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.04.2017, 20:06
Ответы с готовыми решениями:

Чем отличается if от (?:)
Здравствуйте. Почитываю С++, сам программирую в Делфи. Вот немного запутался. В делфи есть условный оператор if, тогда как в С++ есть такой...

Чем отличается this от *this?
Привет всем ! вот код template<typename Key, typename Value> Dictionary<Key, Value>& Dictionary<Key, Value>::operator =(const...

Стек и очереди
3. Вычислить значение выражения следующего вида: x1*xn + x1*xn-1 + … + xn*x1, при этом значения x1, x2, … xn вводятся с клавиатуры и...

23
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
22.04.2017, 20:20
Ну, наверное, тем что стек реализуется по принципу "Последний Вошел - Первый Вышел", а очередь - "Первый Вошел - Первый Вышел".
Англоязычные или американские аббревиатуры, от родоначальников так сказать:
1) "Последний Вошел - Первый Вышел" - LIFO - Last Input First Output;
2) "Первый Вошел - Первый Вышел" - - FIFO - First Input First Output.

Добавлено через 1 минуту
Еще информация: стек ассоциируется с башней, на которую кладут данные или вертикальная труба, очередь - с горизонтальной трубой или с обычной очередью к врачу.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
22.04.2017, 20:32
Цитата Сообщение от DemolitionMan Посмотреть сообщение
или с обычной очередью к врачу
Это очередь с приоритетом.
2
6 / 10 / 2
Регистрация: 29.05.2015
Сообщений: 661
22.04.2017, 20:32  [ТС]
DemolitionMan, я понимаю,но ведь программно получится одно и то же:
Очередь:
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
struct Waiting
{
    Waiting* next;
    int count;
};
 
Waiting* Create()
{
    Waiting* first = new Waiting;
    Waiting* now = first;
 
    while (scanf("%d", &now->count))
    {
        now->next = new Waiting;
        now = now->next;
    }
 
    now->next = NULL;
 
    return first;
}
 
void Print(Waiting *first)
{
    Waiting* now = first;
 
    while (now->next != NULL)
    {
        cout << "now: " << now->count << endl;
        now = now->next;
    }
}
Стек разве не тем же самым будет?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
22.04.2017, 20:33
Программно для очереди и для стека используется массив (возможно, динамически расширяющийся). У стека есть только один указатель на текущий элемент (вершина стека), у очереди их два - указатель на начало и указатель на конец. У стека операции "засунуть" и "высунуть" работают через один и тот же указатель, а у очереди каждый указатель отвечает только за одну операцию. Других различий в программной реализации вроде бы и нет
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
22.04.2017, 20:42
Цитата Сообщение от NewNoob Посмотреть сообщение
C++
1
2
3
4
5
while (scanf("%d", &now->count))
{
* * now->next = new Waiting;
* * now = now->next;
}
- вот тут случайно не зациклится?

Добавлено через 2 минуты
А, ну да, это очередь, это был бы стек если бы читали только по 1 элементу обязательно с конца.
0
6 / 10 / 2
Регистрация: 29.05.2015
Сообщений: 661
22.04.2017, 20:43  [ТС]
DemolitionMan, когда я неправильно введу число - т.е букву введу,он выйдет из цикла
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
22.04.2017, 20:44
Ну, наверное, это не очень хорошая программа, надо предусмотреть официальный ESCAPE.
0
6 / 10 / 2
Регистрация: 29.05.2015
Сообщений: 661
22.04.2017, 22:23  [ТС]
DemolitionMan, можете привести пример стека? Ну,там с начала,а тут с конца. Всё наоборот,но в итоге то же самое,нет? Т.е тут у меня first,как первый,а там последний,как первый.

Добавлено через 1 минуту
DemolitionMan, да,на лабах так показывали,поэтому я не парился над корректностью.

Добавлено через 1 час 36 минут
Evg, на лабах через структуры делаем.
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
23.04.2017, 06:40
Вот, что такое стек:.
Смотрите выше, я все выше написал. Вы не спорьте, а доверьтесь более опытным профессионалам. Если мне не верите, то посмотрите LIFO и FIFO в Интернете. Стек уже сделан в любом компьютере, поэтому просто посмотрите ассемблерные команды push и pop и описание стека.
0
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
 Аватар для magirus
28049 / 15785 / 983
Регистрация: 15.09.2009
Сообщений: 67,752
Записей в блоге: 78
23.04.2017, 07:19

Не по теме:

в качестве шутки-оффтопа
"автомат Калашникова - лучший преобразователь стека в очередь"


1
6 / 10 / 2
Регистрация: 29.05.2015
Сообщений: 661
23.04.2017, 09:25  [ТС]
DemolitionMan, да я понимаю,что такое стек,я просто тупой,похоже,потому что не понимаю,как его реализовать.

Добавлено через 2 минуты
magirus,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Stack* Create()
{
    Stack* top;
    Stack* now = new Stack;
 
    while (scanf("%d", &now->count))
    {
        now->prev = new Stack;
        now = now->prev;
    }
 
    top = now;
 
    top->prev = NULL;
 
    return top;
}
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
23.04.2017, 09:41
Цитата Сообщение от NewNoob Посмотреть сообщение
да я понимаю,что такое стек,я просто тупой,похоже,потому что не понимаю,как его реализовать.
Простецкое:
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
//g++  5.4.0
 
#include <iostream>
 
 
template<typename T>
class Stack
{
public:
    Stack() : mTop(0) {}
    void push(const T &value) 
    {
        mTop = new StackNode(value, mTop);
    }
    bool pop()
    {
        if (mTop) {
            StackNode *d = mTop;
            mTop = mTop->next;
            delete d;
        }
        return mTop != 0;
    }
    T *top() const
    {
        if (mTop) {
            return &(mTop->value);
        }
        return 0;
        
    }
    ~Stack()
    {
        while (pop()) {
        }
    }
private:
    struct StackNode {
        StackNode (const T &value_, StackNode *next_) : value(value_), next(next_){}
        T value;
        StackNode *next;
    };
    StackNode *mTop;
};
 
 
int main()
{
    Stack<int> stack;
    stack.push(10);
    stack.push(12);
    stack.push(13);
    while (stack.top()) {
        std::cout << *stack.top() << ", ";
        stack.pop();
    }
}
http://rextester.com/CXGL89952
0
23.04.2017, 10:34

Не по теме:

мне одному кажется, что rextester стал частенько падать?

0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
23.04.2017, 12:09
Цитата Сообщение от NewNoob Посмотреть сообщение
Evg, на лабах через структуры делаем
Строго говоря, не на структурах, а на списках, реализованных через структуры. Но и здесь разница будет такая же минимальная, как и с массивом: стек требует двунаправленного списка, очередь - однонаправленного. Других принципиальных различий нет

Добавлено через 5 минут
А не, для стека достаточно так же однонаправленного списка (пост #13)

Различие между стеком и очередью будет в том, что стек всегда работает с головой списка, а очередь - с головой и задницей
0
6 / 10 / 2
Регистрация: 29.05.2015
Сообщений: 661
23.04.2017, 15:13  [ТС]
Croessmah, вот если словами,что мне нужно делать,когда я добавляю 2 число? Т.е вершиной должно стать 2 число,т.е первым. А 1 должен стать последним. А указатель у меня как бы на последний,но типа на 1,т.к последний теперь 1. А как это сделать? Т.е ссылки есть на предыдущие у каждого. Как я их смещать тогда буду? Т.е,если я под предыдущий выделять буду - то же самое,что и очередь. Как их перевернуть? А,что я за тупень,от таких вещей голова болит......

Добавлено через 2 часа 15 минут
Croessmah, можно с комментариям?)
0
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
23.04.2017, 15:22
Помню в какой-то книге читал что-то такое:
Как работает очередь можно понять, постояв в ней час-другой
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
23.04.2017, 15:24
Цитата Сообщение от NewNoob Посмотреть сообщение
можно с комментариям?
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
template<typename T>
class Stack
{
public:
    Stack() : mTop(0) {}//В конструкторе инициализируем указатель нулем
    
    void push(const T &value) //Запинать в стек
    {
        //Создаем новый узел, при этом у него next делаем равным mTop,
        //т.е. текущая вершина стека станет следующим 
        //узлом для вновь созданного узла.
        //Ну и новый узел делаем вершиной стека.
        mTop = new StackNode(value, mTop);
    }
    
    bool pop()//Вышвырнуть из стека
    {
        if (mTop) {//Если в стеке есть элементы, то
            StackNode *d = mTop;//сохраняем указатель на вершину в d
            mTop = mTop->next;//следующий узел делаем верхним
            delete d;//удаляем прошлую верхушку
        }
        return mTop != 0;//вернет true, если в стеке имеются еще элементы
    }
    
    T *top() const //Заглянуть в щелку
    {
        if (mTop) {//Если в стеке есть элементы, то
            return &(mTop->value);//возвращаем указатель на значение, сохраненное в верхнем узле
        }
        return 0;//иначе возвращаем 0
        
    }
    
    ~Stack()
    {
        //Харакири для всех узлов
        while (pop()) {//удаляем элементы, пока они есть
        }
    }
private:
    struct StackNode {//узел стека
        StackNode (const T &value_, StackNode *next_) : value(value_), next(next_){}
        T value;//Значение, хранимое в узле
        StackNode *next;//Указатель на следующий узел
    };
    StackNode *mTop;//Указатель на верхний узел стека
};
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
23.04.2017, 15:25
Цитата Сообщение от NewNoob Посмотреть сообщение
DemolitionMan, да я понимаю,что такое стек,я просто тупой,похоже,потому что не понимаю,как его реализовать.
- что там понимать-то, Вы уже все поняли, если не поняли - то почитайте мои сообщения выше. Стек у Вас уже реализован, только надо читать данные не сначала, а с конца.
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
23.04.2017, 15:28
Цитата Сообщение от Evg Посмотреть сообщение
Программно для очереди и для стека используется массив (возможно, динамически расширяющийся)
Точнее набор массивов (если про дек говорим). Дек - не contiguous контейнер, т.е. память там выделяется порциями. Если использовать только один массив - невозможно обеспечить константное время вставки в конец.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.04.2017, 15:28
Помогаю со студенческими работами здесь

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

Структуры: списки, очереди и стек.
Заданная последовательность слов из латинских букв, между словами есть пробелы, после последнего слова точка. Напечатать слова по алфавиту,...

Стек - расположение элементов в конце очереди
Ребят, помогите пожалуйста. Само задание по факту выполнено, но вот одна проблема. Все отрицательный числа в стеке заменяются на 0, но они...

Из элементов «очереди» сформировать второй «стек»
необходимо из элементов «очереди» сформировать второй «стек» заранее спасибо.

В стек по очереди записываются цифры 2006
В стек по очереди записываются цифры 2006. Составить программу в результате работы которой цифры печатаются в той же последовательности....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru