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

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

Войти
Регистрация
Восстановить пароль
 
Гсть
Сообщений: n/a
#1

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

15.06.2008, 10:42. Просмотров 1111. Ответов 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
#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();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2008, 10:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Написать стек на основе одномерного массива (C++):

Стек на основе массива - C++
Банально: создать, добавить, удалить. Без своих &quot;написаний&quot; никак, дело в том, что впритык не хочет реагировать на &quot;next&quot;! #include...

Стек на основе динамического массива - C++
Надо написать стек на основе динамического массива. Как выделить память под новый элемент? template &lt;typename T&gt; void...

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

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

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

Стек записи на основе статического массива типа запись - C++
Добрый вечер! Помогите пожалуйста выполнить задание: Создать стек записи Спортсмен на основе статического массива типа запись. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vourhey
Почетный модератор
6481 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
15.06.2008, 11:13 #2
В глаза сразу бросается то, что n мы вводим в главной функции, а эту переменную используем вообще в левом месте, где она еще даже не инициализирована.
К тому же, обрати внимание:
К примеру у нас добавилось 3 элемента с индексами, соответственно 0, 1 и 2. В этом коде:
Код
stac[sp]=znah;
  sp++;
переменная отвечающая за индекс увеличивается на единицу и указывает на 3 по индексу элемент, который не инициализирован. В функции peek мы ничего с индексом не делаем и берем 3-й по индексу элемент, который должен быть абсолютно случайным числом.
Исправляй.
0
Гсть
Сообщений: n/a
15.06.2008, 11:54 #3
"а бревно-то я и не заметил" спс большое, вроде работает. Что касается n. То я ее объявляю как глобальную переменную в начале. Поэтому потом использую уже в основной фунцкии. Просто чтобы в функцию push() передавать только константу которую нужно поместить, массив и указатель на верхний его элемент должны быть доступны(я умею это жделать только через глобальные). Если их объяылять в основной функции, тогда сама функция push должна будет вот-так выглядеть:
Код
void push(int znah,int *stac1, int sp1)
если есть какой-то другой способ оставить функции push pop peek в таком виде не прибегая к глобальным переменным, скажите буду оч благодарен.
Vourhey
Почетный модератор
6481 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
15.06.2008, 23:48 #4
Да я не про глобальные переменную говорю. А про то, где память выделяется. В твоем коде память выделяется еще до того, как пользователь ввел n. И то n, которое введет пользователь ни на что не влияет. Абсолютно. Вот у тебя код:
Код
scanf("%i", &n);
Интересно, какое влияние он оказывает на строку:
Код
int *stac=(int*)malloc(n*sizeof(int));
М? С твоей точки, зрения выполнение программы вдруг перескочит на объявления и определения переменных и вернется обратно в main?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2008, 23:48
Привет! Вот еще темы с ответами:

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

Список на основе одномерного динамического массива - C++
Добрый вечер! Кто может привести в пример структуру такого списка? (на основе одномерного динамического массива) без использования...

Стек на основе статического массива: вставить число, учитывая сортировку - C++
всем привет. помогите решить проблему с методом pushOrder(). Его суть в том, что бы вставить число учитывая сортировку массива. ...

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


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

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

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