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

Инициализация, добавление и удаление элементов в СТЕКЕ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
victor72
0 / 0 / 0
Регистрация: 05.02.2013
Сообщений: 10
05.02.2013, 18:26     Инициализация, добавление и удаление элементов в СТЕКЕ #1
День добрый,
нужна помощь со стеками.
Передо мною стоит задача:
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);
    
}
Буду благодарен за помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2013, 18:26     Инициализация, добавление и удаление элементов в СТЕКЕ
Посмотрите здесь:

Удаление, добавление, перестановка, сортировка элементов массива C++
Двунаправленный список (добавление/удаление элементов в голову, просмотр списка, реализовать дублирование элементов с заданным значением) C++
C++ Добавление и удаление элементов дин массива
добавление и удаление элементов из двусвязного списка C++
Изменить удаление и добавление элементов в очередь по правилу FIFO. C++
C++ Добавление, удаление элементов в дереве
Удаление и добавление элементов однонаправленного списка C++
Деревья (добавление, удаление и вывод элементов) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Algiz
159 / 159 / 13
Регистрация: 23.02.2011
Сообщений: 347
05.02.2013, 19:06     Инициализация, добавление и удаление элементов в СТЕКЕ #2
Все намного проще
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
#include <iostream>
 
struct stack{
    float value;
    stack *next;
};
 
void push(stack *&s, float v){
    stack* n = new stack;
    n -> value = v;
    n -> next = s;
    s = n;
}
 
bool pop(stack *&s, float &dest){
    if (s == 0)
        return false;
    stack* toDel = s;
    float toRet = toDel -> value;
    s = s -> next;
    delete toDel;
    dest = toRet;
    return true;
}
 
using namespace std;
 
int main(){
    stack *s = NULL;
    float n=0;
    cout << "input\n";
    do{
        cin >> n;
        push(s,n);
    }
    while(n != 0);
    cout << "output\n";
    while(pop(s,n)){
        cout << n << ' ';
    }
    cout << "\nend\n";
    return 0;
}
Добавлено через 4 минуты
и если ты хочешь запихнуть в структуру функцию aka метод класса, то это делается вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
struct foo{
    void bar(){
        cout << "foobar\n";
    }
};
 
int main(){
    foo f;
    f.bar();
    return 0;
}
То, что ты написал имеет смысл, только если функция в структуре будет меняться в противном случае это пустая трата памяти на уазатели.
Yandex
Объявления
05.02.2013, 19:06     Инициализация, добавление и удаление элементов в СТЕКЕ
Ответ Создать тему
Опции темы

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