Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.71
KaTaLoNeC
0 / 0 / 0
Регистрация: 26.05.2010
Сообщений: 9
16.10.2011, 16:56     Стек (односвязный список) #1
Нужно реализовать операции работы со стеком(продвижение, вставка, удаление), хочется понять реализацию продвижения, а вставку и удаление сам напишу

Добавлено через 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;
}
взял его из учебника, но он не работает
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2011, 16:56     Стек (односвязный список)
Посмотрите здесь:

Односвязный, двусвязный список, стек, очередь C++
Односвязный список C++
C++ Односвязный список
Односвязный список C++
C++ Односвязный список
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
16.10.2011, 17:16     Стек (односвязный список) #2
У Страуструпа в первых главах рассматривается создание "своего" стека, можете почитать если интересно.

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

Цитата Сообщение от KaTaLoNeC Посмотреть сообщение
хочется понять реализацию продвижения
А чего непонятного, и добавление и удаление элементов идёт с головы. По сути двигать ничего не надо при pop, нужно только указатель на голову менять чтобы он на сл. элемент указывал.
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 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;
}
Сыроежка
Заблокирован
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 была в вашем коде определена.
Yandex
Объявления
16.10.2011, 17:42     Стек (односвязный список)
Ответ Создать тему
Опции темы

Текущее время: 15:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru