Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

16.10.2011, 16:56. Просмотров 3507. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Стек (односвязный список) (C++):

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

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

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

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

Односвязный список - C++
Задание: Необходимо реализовать односвязный список. В качестве информационной части элемента выступают координаты точки. Необходимо...

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

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

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

Цитата Сообщение от KaTaLoNeC Посмотреть сообщение
хочется понять реализацию продвижения
А чего непонятного, и добавление и удаление элементов идёт с головы. По сути двигать ничего не надо при pop, нужно только указатель на голову менять чтобы он на сл. элемент указывал.
0
xAtom
915 / 740 / 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;
}
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
16.10.2011, 17:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2011, 17:42
Привет! Вот еще темы с ответами:

Односвязный список - C++
Здравствуйте,правильно ли организовал ввод #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; struct spisok { int info; spisok *link;...

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

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

Односвязный список - C++
Нужно составить код для односвязного списка (формирование и вывод). При этом нельзя использовать классы(( Вроде код правильный, но...


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

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

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