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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.71
KaTaLoNeC
0 / 0 / 0
Регистрация: 26.05.2010
Сообщений: 9
#1

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

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

Односвязный, двусвязный список, стек, очередь - C++
В общем, всем кто нуждается. Баггов вы не найдете. Односвязный список #include &lt;iostream&gt; #include &lt;windows.h&gt; using...

Односвязный список - C++
Доброго времени суток. Помогите, пожалуйста, решить задачу: Реализовать односвязный список, с возможностью его разворота в обратную...

Односвязный список - C++
Есть связной список. У класса есть метод добавления элементов(additem()). Надо исправить метод, чтобы он добавлял элемент не в начало, а в...

Односвязный список - C++
Посмотрите программу, правильно ли я вывожу список? Почему список выводится только из 7 цифр, и как можно написать с помощью функций?...

Односвязный Список - C++
Как реализовать список в этом коде, необязательно писать код буду благодарен за совет или подсказку! #include &quot;stdafx.h&quot; #include...

Односвязный список - C++
Задание: Сформировать список вещественных чисел и вычислить сумму. На 32 строке где значения, выдает ошибку. Почему? Сумму этих...

Односвязный список - C++
Всем привет, Дaн oднocвязный cпиcoк, элeмeнт этoгo cпиcка coдержит маccив из 10 цeлых пeрeмeнных. Эти пeрeмeнные нужнo xранит в...

Односвязный список - C++
&quot;Односвязный список 2.exe&quot; (Win32). Загружено &quot;C:\Users\Владислав\Documents\Visual Studio 2012\Projects\Односвязный список...

Односвязный список - C++
Во общем, программа создает список и заносит туда элементы с помощью массива. Но при выводе, программа выводит лишний элемент первым. Где...

односвязный список - C++
Доброго времени суток! У меня такой вопрос: нужно разработать класс, реализующий линейный односвязный список. Методы класса: добавление...

Односвязный список - C++
Пришло время понять и разобраться со списками. Кто-то может посоветовать нормальные статьи в интернете? Сам уже искал, в большинстве...

Односвязный список - C++
Дано два списка с целыми числами. Создать новый список в котором размещены элементы какие одновременно присутствуют в первых двух списках. ...


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

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

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

Цитата Сообщение от KaTaLoNeC Посмотреть сообщение
хочется понять реализацию продвижения
А чего непонятного, и добавление и удаление элементов идёт с головы. По сути двигать ничего не надо при pop, нужно только указатель на голову менять чтобы он на сл. элемент указывал.
xAtom
914 / 739 / 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     Стек (односвязный список)
Ответ Создать тему
Опции темы

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