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

Поиск:

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


Новичок



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

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



сегодня читала про абстрактные типы данных, если честно, ничетра не поняла, наверное потому что там основное внимание уделяется созданию стека... вот в этом главная проблема: зачем создавать стек?? я вообще не могу осознать такого понятие как "создание стека"!!!! стек - это ж типа способ хранения памяти,при котором то ,что ложится в память последним, вынимается первым.... так как же можно его создавать?? он же уже всегда есть!!!! smile объясните пожалуйста несмышленому ламеру... smile
PM MAIL ICQ   Вверх
bel_nikita
Дата 16.2.2005, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



А вот и ответ smile :
Цитата
стек - это ж типа способ хранения памяти,при котором то ,что ложится в память последним, вынимается первым....

Можно создать стек каких-либо объектов. Например дом - это объект. И класть их(дома) в стек. А потом доставать. Абстракция, одним словом smile


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
murzzzzz
Дата 16.2.2005, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



то есть че у получается, мне мало одного стека, куда я загружаю все свое, так я создаю стек, куда буду кидать только дома? так это что, можно для каждого типа данных создать свой стек? и тада все у меня по полочкам типа будет? smile
PM MAIL ICQ   Вверх
rMaveric
Дата 16.2.2005, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2 murzzzzz

Так... Не путай Один Стек с Дргим. )

В АТД под словом стек подразумевается тип данных в котором ЛЮБЫЕ данные (Например тетрадки на столе учительницы) работают по принципу FILO (Фест инпут Ласт Аутпут)... А то как что в памяти комп хранит сюда не относиться, хотя работает по этому же принципу. )


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


Новичок



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

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



так а зачем нам этот стек тогда надо создавать?
PM MAIL ICQ   Вверх
rMaveric
Дата 16.2.2005, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



murzzzzz, для решения задачь определенного типа...
Также как тебе ингда нужны масивы.. коненчо без них можно обойтись, но с ними прозе... Так и стеки, очереди, деревья и прочие структуры нужны чтобы облегчить жизнь )


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


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Представь себе трубку в которую ты засовываешь шарики и они вываливаются с другого конца smile
Это и есть стёк..


Это сообщение отредактировал(а) chipset - 16.2.2005, 01:47


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
bel_nikita
Дата 16.2.2005, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



chipset
это не стёк - это очередь скорее smile


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
rMaveric
Дата 16.2.2005, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2 chipset, Стек это скорей трубочка с запаяным концом... И если вкинуть несколько шариков и понадобиться вытащить первый... ТО сперва прийдется вытрусить все )
Добавлено @ 12:38
2 murzzzzz, а АТД потому и абстрактные, что мы о них говорим как о домиках, шариках и памяти ))) И заметь нам это не мешает... абстракция ;)


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


Эксперт
Group Icon


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

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



А приведите, пожалуйста, пример создания стека с комментариями.
PM WWW   Вверх
Akina
Дата 16.2.2005, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Admin @ 16.2.2005, 13:44)
приведите, пожалуйста, пример создания стека с комментариями.

Запросто. Очередной комментарий пишется на бумажку и кладется поверх стопки комментариев. Снимать и читать можно только сверху - ни в середину, и в низ пачки лазить низзя... smile


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

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


Опытный
**


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

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



Цитата(Akina @ 16.2.2005, 12:47)
Запросто. Очередной комментарий пишется на бумажку и кладется поверх стопки комментариев.

smile smile smile - просто супер.

Пример, реализации ПРОСТОГО стека, работающего с простым типом данных int, на основе массива.

Код

static int *s;
static int n;
void initS(int maxNum) // инициализация стека.
{
   s=malloc(maxNum*sizeof(int)); // размер глубины стека
   n=0; // указатель на текущую глубину стека
}

void pushS(int item) // вставляем новый элемент
{
  s[n++]=item;
}

int popS() // извлекаем элемент
{
  return s[--n];
}


Это сообщение отредактировал(а) Наставник - 16.2.2005, 15:35


--------------------
Богатство языка определяет широту мысли
Персональный сайт >>
PM MAIL WWW   Вверх
srd
Дата 16.2.2005, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

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



Пример для Си++
Код

#include <stack>
#include <iostream>

int main(void)
{
   // стек целых чисел (по умолчанию используется контейнер deque).
   std::stack<int> stack;

   // кладём в стек пять чисел.
   for (int i = 0; i < 5; ++i)
       stack.push(i);

   // теперь извлекаем из стека числа и выводим на экран.
   while (!stack.empty())
   {
       // берём элемент из вершины стека и выводим в поток.
       std::cout << stack.top() << ' ';
       // удаляем элемент в верхушке стека.
       stack.pop();
   }
   std::cout << std::endl;

return 0;
}




--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
Sardar
Дата 16.2.2005, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Структура данных сама по себе "не нужна" smile Но при определённых задачах "всё хранить в массивах" не получится, ты ведь не поделки на коленке пишешь.
Пример, у тебя есть туева хуча строк, эти строки могут делится наподстроки, переносится местами и прочие фишки обычного блокнота. Очень эффективно держать такие строки в связанном списке, в котором эти операции не требуют передвижений больших кусков памяти.

Или другой пример, мы интерпретируем некоторый код в постфиксной нотации, операнды кладутся на стек, затем выполняется операция, результат снова на стек и т.д.

Третий пример тоже со стеком, парсим XML файл, открытый тег кладём на стек, когда встречаем закрывающий тег, на стеке он должен лежать иначе материмся диким матом о ошибочной вложенности тегов smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Chaos A.D.
Дата 17.2.2005, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Пример реализации стека ввиде связанного списка, с избыточными комментариями:

Код

template <class Type>  // Type - тип данных, хранящихся в стеке.
class Stack
{
 private :
   struct Node       // Узлы списка, реализующего стек
   {
     Type *data;    // Данные, хранящиеся в стеке;
     Node* next;   // Указатель на следующий узел списка.
     Node( Type *I, Node *N ) : data(I), next(N) {};
   } *Head;          // Голова списка

 public :
   Stack( void ) : Head(NULL) {};
   virtual ~Stack( void ) { DeleteAll(); };    // При удалении стека, не забываем
                                                                 // удалить все его элементы.

   bool Empty ( void ) const { return Head == NULL; };      // Пустует ли наш стек?
   void Push ( Type *T ) { Head = new Node(T, Head); };  // Добавить элемент в стек.
   Type* Pop ( void );       // Вытолкнуть элемент из стека
   void DeleteAll ( void );  // Удалить всё
};

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

template <class Type>
void Stack<Type>::DeleteAll( void )
{
 while ( Head )                  // Пока есть элементы :
 {
   Node *tmp = Head;       // приговариваем верхний элемент,
   Head = Head->next;     // теперь верхним делаем предыдущий,
   delete tmp;                   // "протыкаем" "приговоренный" элемент.
 }
};


Можно, конечно, удалять элементы по-другому, заставляя каждый узел списка удалять следующий. Но по моему для примера так нагляднее.

Это сообщение отредактировал(а) Chaos A.D. - 17.2.2005, 00:49
--------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0640 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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