Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/24: Рейтинг темы: голосов - 24, средняя оценка - 4.83
KaTaLoNeC
0 / 0 / 0
Регистрация: 26.05.2010
Сообщений: 9
1

Стек (односвязный список)

16.10.2011, 16:56. Просмотров 4518. Ответов 3
Метки нет (Все метки)

Нужно реализовать операции работы со стеком(продвижение, вставка, удаление), хочется понять реализацию продвижения, а вставку и удаление сам напишу

Добавлено через 54 минуты
есть код
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
#ifndef STACK_H
#define STACK_H
#include "list"
template<class STACKTYPE>
class STACK: private List<STACKTYPE> {
public:
    void push (const STACKTYPE &d) { insertAtfront(d);}
    int pop (STACKTYPE &d) {return removefromfront(d);}
    int IsStackEmpty() const {return IsEmpty();}
    void PrintStack() const {print();}
};
#endif
 
#include <iostream>
#include "stack"
using namespace std;
 
int main() {
    Stack<int> intStack;
    int popInteger;
    for (int i=0; i<4; i++){
        intStack.push(i);
        intStack.print();
    }
    while (!intStack.isStackEmpty()){
        intStack.pop(popInteger);
        cout<<popInteger<<endl;
        intStack.printstack();
 
    }
    return 0;
}
взял его из учебника, но он не работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2011, 16:56
Ответы с готовыми решениями:

Односвязный, двусвязный список, стек, очередь
В общем, всем кто нуждается. Баггов вы не найдете. Односвязный список ...

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

Заменить массив структур на односвязный список, и на двусвязный список
Взять текст задания и заменить массив структур на односвязный список, и на...

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

Задали односвязный линейный список с целыми числами. Создать новый список, который содержит элементы заданного списка в обратном порядке
Задали односвязный линейный список с целыми числами. Создать новый список,...

3
Gepar
1181 / 537 / 77
Регистрация: 01.07.2009
Сообщений: 3,517
16.10.2011, 17:16 2
У Страуструпа в первых главах рассматривается создание "своего" стека, можете почитать если интересно.

Цитата Сообщение от KaTaLoNeC Посмотреть сообщение
взял его из учебника, но он не работает
А это потому что не полностью взяли, вы же буквально только объявления взяли, реализацией там и не пахнет, да ещё и слепили всё в один файл.

Цитата Сообщение от KaTaLoNeC Посмотреть сообщение
хочется понять реализацию продвижения
А чего непонятного, и добавление и удаление элементов идёт с головы. По сути двигать ничего не надо при pop, нужно только указатель на голову менять чтобы он на сл. элемент указывал.
0
xAtom
918 / 743 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
16.10.2011, 17:21 3
KaTaLoNeC, держи.
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
#include <iostream>
using namespace std;
 
template<class T>
class Stack {
   struct node {
       T d;
        node* next;
        node(void): next(NULL){}
   };
private:
    node*  ptr;
public:
    Stack(void): ptr(NULL){}
    ~Stack() {
        this->clear();
     }
 
    // добавление элемента по LIFO (последним зашёл, первым вышел)
    void  push(T d) {
        node* n = new node();
        n->next = ptr;
        n->d = d;
        ptr = n;
    }
    T&  top(void) { return ptr->d;  }
 
    // вытолкнуть элемент из верхушки стека
    void pop(void) {
          node* tmp = ptr;
          ptr = ptr->next;
          delete tmp;
          tmp = NULL;
    }
    bool empty(void) const { return (! ptr); }
 
    // удалить весь стек
    void clear(void) {
         node* tmp;
         while(ptr != NULL) {
               tmp = ptr;
               ptr = ptr->next;
               delete tmp;
               tmp = NULL;
          }
     }
};
 
int  main(void) {
   Stack<int> st;
   // заполняем стек
   for(int i = 100; i <= 200; st.push(i++));
 
   // выводим все элементы стека в консоль
   while(! st.empty()) {
        cout << st.top() << ", ";
        st.pop();
   }
   cin.get();
   return 0;
}
1
Сыроежка
Заблокирован
16.10.2011, 17:42 4
Цитата Сообщение от KaTaLoNeC Посмотреть сообщение
Нужно реализовать операции работы со стеком(продвижение, вставка, удаление), хочется понять реализацию продвижения, а вставку и удаление сам напишу

Добавлено через 54 минуты
есть код
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
#ifndef STACK_H
#define STACK_H
#include "list"
template<class STACKTYPE>
class STACK: private List<STACKTYPE> {
public:
    void push (const STACKTYPE &d) { insertAtfront(d);}
    int pop (STACKTYPE &d) {return removefromfront(d);}
    int IsStackEmpty() const {return IsEmpty();}
    void PrintStack() const {print();}
};
#endif
 
#include <iostream>
#include "stack"
using namespace std;
 
int main() {
    Stack<int> intStack;
    int popInteger;
    for (int i=0; i<4; i++){
        intStack.push(i);
        intStack.print();
    }
    while (!intStack.isStackEmpty()){
        intStack.pop(popInteger);
        cout<<popInteger<<endl;
        intStack.printstack();
 
    }
    return 0;
}
взял его из учебника, но он не работает
Чтобы быть программистом, для начала следует вразумительно излагать свои мысли! Что значит "не работает"? Не компилируется?! Выдает ошибку во время выполнения?! Или же получается не тот результат, который ожидается?!

В вашем примере вообще не понятен смысл включаемого заголовочного файла "stack" после того, как вы уже определил стек.

А директивы

#ifndef STACK_H
#define STACK_H

вообще бессмысленны в вашем коде, так как до их присутствия в коде, ничего выше них в код не включается. Поэтому никак не может быть, что SGACK_H была в вашем коде определена.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2011, 17:42

Преобразовать односвязный список в двусвязный список
Доброго времени суток! Помогите, пожалуйста, преобразовать программу из...

Односвязный список
Здравствуйте! Кто может разъяснить как вставить в узел заданного места...

Односвязный список
Всем привет. Помогите разобраться с односвязным списком. Вот собственно и...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru