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

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

Войти
Регистрация
Восстановить пароль
 
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
#1

Формирование стека - C++

11.11.2012, 17:32. Просмотров 843. Ответов 8
Метки нет (Все метки)

Доброго дня.

Возникли следующие вопросы ,

C++
1
2
3
4
5
6
void push(stac **top ,int d){ // 1. Две ** означают указатель на динамическую переменную?
    stac *pv = new stac; 
    pv->d = d;
    pv->p = *top;               //  2.Данная строка "присваивает текущему элементу ссылку на предыдущий?"
    *top = pv;                    //  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
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
struct stac{
    int d;
    stac *p;
};
 
 
stac * first(int d);
void push(stac **top,int d);
int pop(stac **top);
 
int main() {
    stac *top = first(1);
    for(int i =2 ;i<6;i++)push(&top,i);
    while(top){
        cout<<pop(&top) << ' ';
    }
    return 0;
}
 
stac *first(int d){
    stac *pv = new stac; //выделяем память
    pv->d = d; //присваиваем d
    pv->p =0;// след эл-та нет
    return pv; //возвращаем
}
 
void push(stac **top ,int d){
    stac *pv = new stac;
    pv->d = d;
    pv->p = *top;
    *top = pv;
}
 
int pop(stac **top){
    int temp = (*top)->d;
    stac *pv = *top;
    *top = (*top)->p;
    delete pv;
    return temp;
    
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2012, 17:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Формирование стека (C++):

Структура стек (: добавить элемент в стек, удалить элемент из стека, получить значение с вершины стека, размер стека...) - C++
Всем привет,ребят помогите пожалуйста с лабой,вообще без понятия про стеки:( Может кто то делал,или встречался с таким заданием: ...

Удалить элемент из стека по условию и добавить элемент в начало стека - C++
Здравствуйте, помогите пожалуйста исправить(дописать) программы. 1). Нужно удалить элемент, находящийся в середине стека , если число...

Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Ввести эталонный символ. - C++
Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Ввести...

про 2 стека - C++
Обьясните на словах, каким образом: 1.вводим стек первый 2.если мое условие - вводим во второй Вопрос: Каким образом реализовать...

Переполнение стека - C++
Привет народ. Такой вопрос: Если в общем виде: if (условие) double d else double d почему компилятор отказывается выполнять такое с...

просмотр стека - C++
вот так смотрю содержимое ВСЕГО стека: while(!mystack.empty()) { cout&lt;&lt;mystack.top()&lt;&lt;&quot; &quot;; mystack.pop(); } cout&lt;&lt;endl; ...

8
Croessmah
Эксперт CЭксперт С++
13416 / 7570 / 855
Регистрация: 27.09.2012
Сообщений: 18,632
Записей в блоге: 3
Завершенные тесты: 1
11.11.2012, 17:41 #2
C++
1
2
3
4
5
6
void push(stac **top ,int d){
    stac *pv = new stac;
    pv->d = d;
    pv->p = *top;
    *top = pv;
}
Выделяется память под pv, в pv->d заносится значение параметра d;
в pv->p записываем адрес "верхушки" стэка
потом "верхушкой" делаем pv
1
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
11.11.2012, 17:55  [ТС] #3
Кусок кода выделенный жирным шрифтом , что означают скобки ?
C++
1
int temp = [B](*top)[/B]->d;
0
Croessmah
Эксперт CЭксперт С++
13416 / 7570 / 855
Регистрация: 27.09.2012
Сообщений: 18,632
Записей в блоге: 3
Завершенные тесты: 1
11.11.2012, 18:58 #4
C++
1
int temp = (*top)->d;
Разыменовываем top и обращаемся к d
1
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
11.11.2012, 19:07  [ТС] #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
stac *push(stac *p){
    stac *q;
    q = p;
    for(int i=2;i<20;i++){
        p->next = new stac;
        p = p->next;
        p->inf = i;
        p->next = q;
        q = p;
        
        }
    return p;
    
}
return возвращает верхушку.
Попрошу подсказать где в коде ошибка.
0
Croessmah
Эксперт CЭксперт С++
13416 / 7570 / 855
Регистрация: 27.09.2012
Сообщений: 18,632
Записей в блоге: 3
Завершенные тесты: 1
11.11.2012, 19:18 #6
А что у Вас тут вообще делается?
0
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
11.11.2012, 19:47  [ТС] #7
Тогда я не понимаю , как строить стек.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
stac *push(stac *p){
    stac *q;
    q = p; // предполагаю , чтоб q содержало ссылку на p
    for(int i=2;i<20;i++){
        p->next = new stac; //выделяем память
        p = p->next;  // переходим к следующему элементу
        p->inf = i; //присваиваем значение
        p->next = q; //  связываем предыдущий элемент с текущим
        q = p; // текущий элемент становится верхушкой
        
        }
    return p;
    
}
0
Croessmah
Эксперт CЭксперт С++
13416 / 7570 / 855
Регистрация: 27.09.2012
Сообщений: 18,632
Записей в блоге: 3
Завершенные тесты: 1
11.11.2012, 20:02 #8
Примерно так(не проверял):
C++
1
2
3
4
5
6
7
8
9
10
stac *push(stac **p){
    stac *q;
    for(int i=2;i<20;i++){
            q=new stac;//Выделяем память под новый элемент stac(кстати, пишется stack)
            q->inf=i;//Зановим значение i в новый элемент
            q->next=*p;//Теперь next будет указывать на последний элемент
            *p=q;//делаем вновь созданный элемент последним элементом в стеке
        }
    return *p;    
}
ИМХО вы просто не представляете что такое стек. Попробуйте нарисовать стек на бумаге - станет легче.
1
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 145
11.11.2012, 20:11  [ТС] #9
Код верный .
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2012, 20:11
Привет! Вот еще темы с ответами:

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

Размер стека - C++
Как узнать, какой размер размер стека использовала программа? Например, вот эта: #include &lt;iostream&gt; void print_seq(int x) { if...

Реализация стека - C++
Здравствуйте, помогите пожалуйста с реализацией стека без использования STL. Стек отображен в памяти Вектором, память статическая(1...

увеличение стека - C++
народ кто знает как увеличить размер стека ? VS 2008


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
11.11.2012, 20:11
Ответ Создать тему
Опции темы

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