Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как можна "создать стек"?? 
:(
    Опции темы
Wowa
Дата 17.2.2005, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



А простыми словами у Stack(нем. Stapel) есть следующие методы:

new - создаем новый пустой стек.

isEmpty - true, если стек пуст

push(a) - добавляем один элемент "сверху"

pop() - удаляем верхний элемент

top - возвращает верхний элемент стека назад

пример:
Код

isEmpty(new) = true
isEmpty(push(new, a)) = false
pop(push(x)) = x

PM WWW   Вверх
Borisff2003
Дата 17.2.2005, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 198
Регистрация: 26.2.2004
Где: г. Уфа

Репутация: 1
Всего: 1



Цитата

Код

Type *Stack<Type>::Pop()  //  возвращает "вытолкнутый" элемент.
{
if ( !node ) return NULL;    // Если стек пуст, возвращаем NULL.
Node *tmp = Head;          // Возвращаем "верхний", а верхушкой
Head = Head->next;        // стека делаем предыдущий элемент.
return tmp->data;
};



А кто tmp удалять будет?

Код

Type *Stack<Type>::Pop()  //  возвращает "вытолкнутый" элемент.
{
if ( !node ) return NULL;    // Если стек пуст, возвращаем NULL.
Node *tmp = Head;          // Возвращаем "верхний", а верхушкой
Type *tdata=tmp->data;
Head = Head->next;        // стека делаем предыдущий элемент.
delete tmp;
return tdata;
};

--------------------
Лень, двигатель прогресса
PM MAIL WWW ICQ   Вверх
Akina
Дата 17.2.2005, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



Цитата(Admin @ 17.2.2005, 13:22)

new - создаем новый пустой стек.
isEmpty - true, если стек пуст
push(a) - добавляем один элемент "сверху"
pop() - удаляем верхний элемент
top - возвращает верхний элемент стека назад


isEmpty не нужен, это равносильно ошибке при снятии очередного элемента со стека, дублирование функции pop.

top тоже не нужен, это равносильно снятию элемента и немедленному его возвращению, т.е. дублирование функций pop+push.

А вот функцию убиения (а возможно и/или очистки) стека бы сделать.

С точки же зрения удобства можно модифицировать pop - передавать ему count с дефолтом = 1, чтобы пачкой можно было снимать (возвращается массив) или чистить, и push - чтобы принимал массив, в т.ч. dummy, и размещал (впрочем это наверное лишнее)...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
rMaveric
Дата 17.2.2005, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 18.7.2003

Репутация: нет
Всего: 6



Если конечно не ошибаюсь, то у стекак должно быть всего два метода ))) Изначально

положить в стек и достать из стека...

Второй в свою очередь возвращает последний элемент и убивает его в стеке.

Все остальное это уже навороты.... Так например в свое время писал АТД стека... Так там много каких опираций предусмотрел... Вплоть до сортировок и выдач максимумов и минимумов, а также склеивания и перемешивания стеков.... Но у Стека как такового всего два метода.


--------------------
Моя благодарность не будет иметь границ. в определенных рамках конечно ;)
---
Веду IT блог
PM MAIL WWW ICQ   Вверх
pablo
Дата 17.2.2005, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

Репутация: 4
Всего: 6



Вариантов создания стека есть немного, один из них ето юзать стандартную библеотеку,
второй написать класс на базе массива,
и третий написать класс используя динамическую память.

Если кого интересует третий вариант(т.к) первый уже преставлен, второй не очень предпочтителен,
пишите на мыло [email protected], пришлю исходники.


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0596 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.