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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.76
Diana_a
1 / 1 / 0
Регистрация: 05.05.2011
Сообщений: 35
#1

Реализовать стек - C++

04.10.2011, 18:30. Просмотров 5315. Ответов 5
Метки нет (Все метки)

Реализация стека на базе массива

Добавлено через 4 минуты
На языке си написать программу которая реализовывала стек на базе массива
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2011, 18:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализовать стек (C++):

Реализовать кольцевой стек. - C++
не могу сделать кольцевой стек, помогите или подскажите что можно сделать. #include <iostream> using namespace std; int main() ...

Помогите реализовать стек - C++
Здравствуйте. Помогите, пожалуйста, решить задачу: Реализуйте структуру данных "стек", реализовав все указанные здесь методы при помощи...

Реализовать стек с помощью массива - C++
Попытался реализовать стек с помощью массива. Но почему то ничего не происходит, так же попробовал пользоваться template<typename T>,...

Помогите реализовать стек на основе массива - C++
помогите с задачачей по с++ 3. Реализуйте стек на основе массива.

Реализовать стек с использованием односвязного списка - C++
Народ, у меня в лабораторной работе задание: реализовать стек с помощью односвязного списка. Я не очень понял, что это за стеки и списки и...

Реализовать стек. Определение правильного скобочного выражения - C++
1. Разработать и создать набор функций для пользовательского типа данных типа стек 2. С помощью стека решить предложенные задачи: ...

5
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,811
04.10.2011, 19:28 #2
В соседней теме лежит: Очередь на базе массива
0
Diana_a
1 / 1 / 0
Регистрация: 05.05.2011
Сообщений: 35
04.10.2011, 19:47  [ТС] #3
Ой, спасибо. это на си?
0
alkagolik
Заблокирован
04.10.2011, 22:44 #4
не знаю я как на базе массива... знаю во так.
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
struct  Node{
    int data;
    Node *next, *prev;
};
 
typedef Node *Pnode;
 
struct Stack{
    Pnode   head, tail;
};
 
void push(Stack &s, int data){
    Pnode new_node;
    new_node = new Node;
 
    new_node->data = data;
    new_node->next = s.head;
    new_node->prev = NULL;
 
    if (s.head) s.head->prev = new_node;
    s.head = new_node;
    if (!s.tail) s.tail = s.head;
}
 
int pop(Stack &s){
    Pnode top_node = s.head;
    int i;
 
    if (!top_node)
        return 0;
    i = top_node->data;
    s.head = top_node->next;
    if (s.head) s.head->prev = NULL;
    else
        s.tail = NULL;
    delete top_node;
    return i;
}
 
int main(){
    Stack *a = new Stack;
    int b;
    srand(time(NULL));
 
    std::cout << "помещаем в стек\n\n";
    for(int i = 1; i != 21; ++i){
        push(*a, i);
        std::cout << i << ' ';
    }
 
    std::cout << "\n\nизвлекаем из стека\n\n";
    for(int i = 0; i != 20; ++i){
        b = pop(*a);
        std::cout << b << " ";
    }
 
    std::cout << "\n\n" << std::endl;
    delete[]a;
    return 0;
}
консоль

помещаем в стек

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

извлекаем из стека

20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,811
05.10.2011, 00:07 #5
alkagolik, для стека односвязного списка достаточно
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
#include <stdio.h>
#include <stdlib.h>
 
typedef struct STACKNODE {
    int value;
    struct STACKNODE * next;
} stacknode_t;
 
int push(stacknode_t ** stack, int value){
    stacknode_t * node;
    
    if ( ! ( node = malloc(sizeof(stacknode_t)) ) )
        return -1;
    
    node->value = value;
    node->next = *stack;
    *stack = node;
    
    return 0;
}
 
int pop(stacknode_t ** stack, int * value){
    stacknode_t * node;
    
    if ( *stack == NULL )
        return -1;
    
    node = (*stack)->next;
    *value = (*stack)->value;
    free(*stack);
    *stack = node;
    
    return 0;
}
 
int menu(void){
    int ret;
    
    printf("\n1 - push, 2 - pop, 0 - exit\n> ");
 
    return ( scanf("%d", &ret) == 1 ) ? ret : -1;
}
 
int main(void){
    stacknode_t * stack = NULL;
    int action, value;
    
    while ( action = menu() ){
        switch ( action ){
            case 1:
                printf("Value: ");
                if ( scanf("%d", &value) != 1 ){
                    scanf("%*s");
                    fprintf(stderr, "Input error!\n");
                    break;
                }
                if ( push(&stack, value) ){
                    fprintf(stderr, "Memory error!\n");
                    exit(1);
                }
                printf("Added to stack.\n");
                break;
            case 2:
                if ( pop(&stack, &value) ){
                    fprintf(stderr, "Empty stack or unknown error!\n");
                    break;
                }
                printf("Returned value: %d\n", value);
                break;
            default:
                scanf("%*s");
                fprintf(stderr, "Wrong menu selection!\n");
                break;
        }
    }
    
    while ( ! pop(&stack, &value) )
        ;
    printf("Goodbye!\n");
    
    exit(0);
}
1
alkagolik
Заблокирован
05.10.2011, 01:44 #6
easybudda, я ваши сообщения время от времени в закладки кидаю
1
05.10.2011, 01:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2011, 01:44
Привет! Вот еще темы с ответами:

Реализовать стек на массиве с использованием двунаправленного списка - C++
здраствуйте, может кто-то пожалуйста привести реализацию примера стека, реализованого на массиве с использиванием...

Реализовать стек и 3 оператора для работы с ним - C++
Доброго времени суток! Помогите, есть такая задача: Реализовать стек и 3 оператора для работы с ним (Push (x, S), Locate (х, S),...

Реализовать стек для хранения и операций с данными - C++
Ребята, помогите, пожалуйста. Заранее огромное спасибо! Реализовать стек для хранения и операций с данными вида: Имя процедуры...

Стек на основе массива, реализовать функцию resize - C++
1) Добавить деструктор, конструктор копии и перегрузку операции присваивания. 2) Используя функцию resize, изменить функцию добавления...


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

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

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