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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.79
privit_91
13 / 13 / 0
Регистрация: 06.11.2012
Сообщений: 79
#1

Статический и динамический стек - C++

20.01.2013, 16:34. Просмотров 4947. Ответов 2
Метки нет (Все метки)

Необходимо разработать программу, реализующую алгоритм стека (10 элементов). Решение необходимо представить в двух вариантах: статическом (на основе массива структур) и динамическом. В качестве элемента стека выбрать структуру жд_вокзал:
i. Номер (ключ)
ii. Станция отправления
iii. Станция назначения
iv. Дата/время отправления
v. Дата/время прибытия


Предусмотреть многоуровневое меню:
1) Заполнение стека: с консоли (циклически)
2) Удаление элемента из стека (циклически) безвозвратно
3) Очистка стека (с выводом удаляемых элементов) безвозвратно
4) Вывод элементов, содержащихся в стеке на экран
5) Вывод количества элементов в стеке
6) Выход


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
#include <iostream.h>
struct zd_vok // Структура жд вокзал
{ int nomer;
  char stan_otp[55];
  char stan_naz[55] ;
  char dat_vre_otp[30] ;
  char dat_vre_naz[30] ;
};
struct STACK //
{ zd_vok info; //поле типа структура
  STACK *next; //указатель на след. элемент
};
 
void Add(STACK **stack, zd_vok d) // Добавление элементов в стек
{ STACK *tmp = new STACK;
  tmp->info=d;
  tmp->next=*stack;
  *stack=tmp;
}
void Del(STACK **stack) //Удаление элементов со стека
{ STACK *tmp=*stack;
  *stack=(*stack)->next;
  delete tmp;
  return tmp;
}
int Empty(STACK *stack) //Проверка стека
{ if (stack==NULL) return 0; else return 1;
}
void ClearAll(STACK **stack) //Удаление стека
{ STACK *tmp;
  while(*stack!=NULL)
  { tmp=*stack;
    *stack=(*stack)->next;
    delete tmp;
  }
}
void Show(STACK *stack)
{ STACK *tmp=stack;
  while(tmp!=NULL)
  { cout << "Nomer: "<< tmp->info.nomer << endl;
    cout << "Stancia otpravlenia: "<< tmp->info.stan_otp << endl;
    cout << "Stancia naznachenia: "<< tmp->info.stan_naz << endl;
    cout << "Data vremia otpravlenia: "<< tmp->info.dat_vre_otp << endl;
    cout << "Data vramia naznachenia: "<< tmp->info.dat_vre_naz <<endl<<endl;
    tmp=tmp->next;
   }
}
 
 
void main()
{
 
    STACK *stack=NULL;
    int num,Key;
    STACK info;
    zd_vok d;
    int otv;
 
int i=1;
cin>>otv;
switch(otv)
{ case 1:
    { do
        { 
            cout<<"Nomer: - " <<endl;
            cin>>d.nomer;
            cout<<"Stancia otpravlenia: - "<<endl;
            cin>>d.stan_otp;
            cout<<"Stancia naznachenia: - "<<endl;
            cin>>d.stan_naz;
            cout<<"Data vremia otp: - "<<endl;
            cin>>d.dat_vre_otp;
            cout<<"Data vremia naz: -"<<endl;
            cin>>d.dat_vre_naz;
            Add(&stack,d);
            cout << endl << "Element dobablen" << endl;
            cout << endl << "Elementi steka"<<i << endl << endl;
            Show(stack);
            i++;
        } while (i<3);
 
}
};
 
}

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

Динамический и статический массив - C++
Подскажите, в чем разница. Имеется статический массив, который просто задается: long mas = { 0 }; Т.е. просто вставляем массив...

Статический и динамический экземпляры класса - C++
В чем разница между статическим и динамическим экземплярами класса? Мои познания здесь скромны: 1) Разная инициализация. У меня есть...

Переделать статический массив в динамический - C++
Помогите переделать статический массив в динамический #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #include...

Переделать статический массив в динамический - C++
Помогите переделать статический массив в динамический. #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std;...

Переделать статический массив в динамический - C++
Помогите пожалуйста переделать статический массив в динамический #include &lt;iostream&gt; #include &lt;iomanip&gt; #define N 6 #define M 9 ...

Как перевести статический массив в динамический? - C++
Есть статический массив типа char,подскажите как перевести его в динамический и как потом изменять его размерность если понадобиться...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
20.01.2013, 18:30 #2
ну вот динамический вариант у вас похоже на основе односвязного списка. когда вы добавляете элемент в стек, в динамической памяти создается узел и в него копируется значение.
статический - это я так понимаю не надо ничего динамически выделять. зарезервировать с самого начала в классе стека массив из десяти элементов и заполнять его по мере добавления элементов с ведением счетсчика заполненных ячеек этого массива. как только места в этом массиве не хватает - значит добавление элемента фейлится. вот как-то так мне это видится.
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
20.01.2013, 18:51 #3
Цитата Сообщение от privit_91 Посмотреть сообщение
Скажите я верно делаю ?
Похоже на то... Но все-таки я посоветовал бы сделать следующим образом:
1) переименовать стрктуру STACK в Node
C++
1
2
3
4
5
struct Node
{ 
    zd_vok info; //поле типа структура
    Node *next; //указатель на след. элемент
};
2) сделать отдельную структуру для представления стека
C++
1
2
3
4
struct Stack 
{
    Node* top; // указатель на вершину стека
};
Таким образом:
1) код станет намного более прозрачным, например
C++
1
2
3
4
5
6
7
8
9
void Add(Stack& stack, const zd_vok& d) // Добавление элементов в стек
{ 
    Node *tmp = new Node;
    
    tmp->info = d;
    tmp->next = stack.top;
    
    stack.top = tmp;
}
2) При создании стека на основе статического массива ничего не нужно будет менять в функции main, все функции для работы со стеком останутся те же, изменится только их реализация.
Цитата Сообщение от privit_91 Посмотреть сообщение
Не могу понять статически (на основе массива структур) вариант как его сделать?
Например, так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct Stack 
{
    zd_vok data[100];
    int size; // количество элементов в стеке(size - 1 соответственно элемент находящийся на вершине стека)
};
 
void Add(Stack& stack, const zd_vok& d) // Добавление элементов в стек
{ 
    // ...сдесь проверка на переполнение...
    // ...
    stack.data[stack.size++] = d;
}
 
// ...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2013, 18:51
Привет! Вот еще темы с ответами:

Заменить в программе статический массив на динамический - C++
Программа работает, но теперь нужно привести ее к виду, в котором участвует уже динамический массив. ЕСЛИ ВОЗМОЖНО не меняйте printf и...

Переделать статический массив структур в динамический - C++
Имею структуру из 8 эл-ов (массивов чаров и 2 подструктуры). Имею исходные данные (5 штук, строк с ними) под эту структуру. Массив с этими...

Нужно переделать статический массив в динамический - C++
Помогите пожалуйста! Нужно переделать статический массив в динамический. #include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; #include...

динамический стек (перегрузить операции +, +=, -= в динами) - C++
скажите пожалуйста, как перегрузить операции +, +=, -= в динамическом стеке???


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

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

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