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

Инициализация, добавление и удаление элементов в СТЕКЕ через связный список

05.02.2013, 18:26. Просмотров 1807. Ответов 2
Метки нет (Все метки)

День добрый,
нужна помощь со стеками.
Передо мною стоит задача:
1) Инициализировать СТЕК через связный список
2) Добавить элемент в СТЕК, вывести на экран СТЕК
3) Удалить элемент со СТЕКА, вывести на экран СТЕК

Мне кажется, что я создал не совсем СТЕК, а СТЕК с элементами ОЧЕРЕДИ, звучит как бред но... в общем я запутался.
Вот мой код:
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// Stack (Test).cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
 
const int del = 3;      //number of elements that we will delete
 
struct STACK
{
    float Value;
    STACK *Link;
};
 
struct Using_Stack
{
    STACK *Top, *Bot;
    void (*Init)(Using_Stack*);
    void (*Push)(Using_Stack*, float );
    float (*Pop)(Using_Stack*);
};
 
void Init_Sub (Using_Stack *MyStack)
{
    MyStack->Top = 0;   
    MyStack->Bot = 0;   
};
 
void Push_Sub (Using_Stack *MyStack, float Character)
{
    STACK *New_El = new STACK;
    New_El->Value = Character;
    New_El->Link = 0;
    if (MyStack->Top == 0)
    {
        MyStack->Top = New_El;
        MyStack->Bot = New_El;
    }
    else
    {
        MyStack->Bot->Link = New_El;
        MyStack->Bot = New_El;
    }
};
 
float Pop_Sub (Using_Stack *MyStack)
{
    STACK *Del;
    float Reading;
    if (MyStack->Top != 0)
    {
        Del = MyStack->Top;
        Reading = Del->Value;
        MyStack->Top = MyStack->Top->Link;
        delete Del;
    }
    return Reading;
};
 
void main ()
{
    Using_Stack *MyStack;
    MyStack = new Using_Stack;
 
    MyStack->Init = Init_Sub;
    MyStack->Push = Push_Sub;
    MyStack->Pop = Pop_Sub;
 
    MyStack->Init (MyStack);    //Initialization of Top and Bot
    int Add;
    float Symb;
    int i = 0;
 
    MyStack->Push (MyStack, 10);        //Recording of one value
    MyStack->Push (MyStack, 20);
 
    printf("Our Stack is...");
    printf("\n\n %c", MyStack->Top->Value);
    printf("\n %c", MyStack->Top->Link->Value);
    printf("\n\n Enter the value you want to ADD \n");
    scanf_s("%c", &Symb);
    MyStack->Push (MyStack,Symb);
 
    printf("\n\n So, now our Stack is");
    printf("\n\n %c", MyStack->Top->Value);
    printf("\n %c", MyStack->Top->Link->Value);
    printf("\n %c \n\n", MyStack->Top->Link->Link->Value);  //???
 
    printf("\n And now we will DELETE one value \n\n\n");
    float Read;
    Read = MyStack->Pop (MyStack);      //Reading of one value
    printf("\n Value which we will delete is - ");
    printf("%c \n\n", Read);
    printf("And now, our Stack is");
    printf("\n\n %c", MyStack->Top->Value);
    printf("\n %c \n\n\n", MyStack->Top->Link->Value);
    
}
Буду благодарен за помощь.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2013, 18:26
Ответы с готовыми решениями:

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

Инициализация, добавление и удаление элементов в СТЕКЕ
День добрый, нужна помощь со стеками. Передо мною стоит задача: 1) Инициализировать СТЕК через...

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

Связный список (Используя структуру описания даты, построить связный список студентов, сформированный в алфавитном порядке)
Здраствуйте! Помогите пожалуйста найти косяк. Выводится только первая строчка из списка студентов....

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

2
easybudda
Модератор
Эксперт CЭксперт С++
10247 / 6138 / 1544
Регистрация: 25.07.2009
Сообщений: 11,684
05.02.2013, 18:31 2
victor72, вот делал когда-то, работало вроде: Преобразовать стек в два стека - первый должен содержать только чётные числа, второй — только нечётные
1
MrGluck
Модератор
Эксперт CЭксперт С++
8113 / 4965 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
05.02.2013, 18:36 3
Вот на С++, но логику программы оттуда взять можно:
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <cstddef>
#include <iterator>
#include <stdexcept>
 
template <class T>
class Stack
{
    public:
        Stack();
        template <class InputIterator>
        Stack(InputIterator beg, InputIterator end);
        Stack(const Stack &);
        Stack& operator= (const Stack &);
        ~Stack();
 
        bool empty() const;
        void push(const T& obj);
        void pop();
        std::size_t size() const;
        const T& top() const;
        T& top();
 
    private:
        T& getTopData() const;
        void swap(const Stack &) throw();
 
        struct Node
        {
            T data_;
            Node *next_;
            Node(const T &data, Node *nextNode);
            Node(const Stack::Node &);             // prohibit copy
            Node& operator= (const Stack::Node &); // and assignment
        } *Top;
        std::size_t counter_;
};
 
 
template <class T>
Stack<T>::Stack() : Top(nullptr), counter_(0) {}
 
template <class T>
template <class InputIterator>
Stack<T>::Stack(InputIterator beg, InputIterator end) : Stack()
{
    while(beg != end)
    {
        push(*beg);
        ++beg;
    }
}
 
template <class T>
Stack<T>::Stack(const Stack &s) : Stack()
{
    Stack tmp;
    for (Node *n = s.Top; n; n = n->next_)
        tmp.push(n->data_);
    for (Node *n = tmp.Top; n; n = n->next_)
        this->push(n->data_);
}
 
template <class T>
Stack<T>& Stack<T>::operator= (const Stack &s)
{
    if(this != &s)
        Stack(s).swap(*this);
    return *this;
}
 
template <class T>
Stack<T>::~Stack()
{
    while(Top)
        pop();
}
 
template <class T>
bool Stack<T>::empty() const
{
    return Top == nullptr;
}
 
template <class T>
void Stack<T>::push(const T& obj)
{
    Top = new Node(obj, Top);
    counter_++;
}
 
template <class T>
void Stack<T>::pop()
{
    if (!Top)
        return;
    Node *tmp = Top;
    Top = Top->next_;
    delete tmp;
    counter_--;
}
 
template <class T>
std::size_t Stack<T>::size() const
{
    return counter_;
}
 
template <class T>
const T& Stack<T>::top() const
{
    return getTopData();
}
 
template <class T>
T& Stack<T>::top()
{
    return getTopData();
}
 
template <class T>
T& Stack<T>::getTopData() const
{
    try
    {
        if (!Top) throw std::out_of_range("Trying to access to nothing");
        return Top->data_;
    }
    catch (const std::exception &e)
    {
        std::cerr << e.what() << std::endl;
    }
}
 
template <class T>
Stack<T>::Node::Node(const T &data, Node *next) : data_(data), next_(next) {}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2013, 18:36

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

Список: добавление и удаление элементов
Здравствуйте, мне нужно реализовать список и написать добавление и удаление элементов,но...

Связный список - добавление елемента в конец , деструктор
Доброе утро. Пишу хеш-таблицу в билдере по условиям лабки. Берем слова из текстового файла ,...


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

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

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