Гсть
1

Написать стек на основе одномерного массива

15.06.2008, 10:42. Показов 1996. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пробую написать стек на основе одномерного массива. Скажите что не так делаю.
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.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
#include <stdio.h>
int  sp=0, n; //размер стека. индекс элемента на вершине стека
int *stac=(int*)malloc(n*sizeof(int));
int size()
{
 int k=sp;
 return k;
}
 
void push(int znah)
{
 if (sp==3)
  {
   printf("Стек полон");
  }
 else
 {
  stac[sp]=znah;
  sp++;
 }
}
 
int pop()
{
 int k=stac[sp];
 stac[sp]=0;
 sp--;
 return k;
}
 
int peek()
{
 int k2=stac[sp];
 return k2;
}
 
 
void main ()
{
clrscr ();
printf("Введите размер стека \n");
scanf("%i", &n);
 
 
push(6);
push(8);
push(9);
int k1=100;
k1=peek();
printf("%i \n", k1);
k1=pop();
printf("%i \n", k1);
k1=size();
printf("%i \n", k1);
push(6);
push(2);
push(9);
 
getch();
}
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2008, 10:42
Ответы с готовыми решениями:

Стек на основе массива
Здравствуйте! Пожалуйста, подскажите, что за ошибку выдает компилятор: я разбираюсь со структурами...

Стек на основе массива
Помогите реализовать добавление/удаление элементов private void button3_Click(object sender,...

Стек на основе массива
Банально: создать, добавить, удалить. Без своих &quot;написаний&quot; никак, дело в том, что впритык не...

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

3
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
15.06.2008, 11:13 2
В глаза сразу бросается то, что n мы вводим в главной функции, а эту переменную используем вообще в левом месте, где она еще даже не инициализирована.
К тому же, обрати внимание:
К примеру у нас добавилось 3 элемента с индексами, соответственно 0, 1 и 2. В этом коде:
Код
stac[sp]=znah;
  sp++;
переменная отвечающая за индекс увеличивается на единицу и указывает на 3 по индексу элемент, который не инициализирован. В функции peek мы ничего с индексом не делаем и берем 3-й по индексу элемент, который должен быть абсолютно случайным числом.
Исправляй.
0
Гсть
15.06.2008, 11:54 3
"а бревно-то я и не заметил" спс большое, вроде работает. Что касается n. То я ее объявляю как глобальную переменную в начале. Поэтому потом использую уже в основной фунцкии. Просто чтобы в функцию push() передавать только константу которую нужно поместить, массив и указатель на верхний его элемент должны быть доступны(я умею это жделать только через глобальные). Если их объяылять в основной функции, тогда сама функция push должна будет вот-так выглядеть:
Код
void push(int znah,int *stac1, int sp1)
если есть какой-то другой способ оставить функции push pop peek в таком виде не прибегая к глобальным переменным, скажите буду оч благодарен.
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
15.06.2008, 23:48 4
Да я не про глобальные переменную говорю. А про то, где память выделяется. В твоем коде память выделяется еще до того, как пользователь ввел n. И то n, которое введет пользователь ни на что не влияет. Абсолютно. Вот у тебя код:
Код
scanf("%i", &n);
Интересно, какое влияние он оказывает на строку:
Код
int *stac=(int*)malloc(n*sizeof(int));
М? С твоей точки, зрения выполнение программы вдруг перескочит на объявления и определения переменных и вернется обратно в main?
0
15.06.2008, 23:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2008, 23:48
Помогаю со студенческими работами здесь

Стек на основе динамического массива
Надо написать стек на основе динамического массива. Как выделить память под новый элемент? ...

Стек на основе вектора, линейного массива
Дан текст из слов (в input.txt), слова разделены любыми знаками препинания, найти сочетания с ph,...

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

Стек целых строк на основе статического массива
Создать стек целых строк на основе статического массива. Реализовать методы : Добавить элемент,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru