Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2011, 16:18   #1
tiger()
Пользователь
 
Регистрация: 09.04.2011
Сообщений: 49
По умолчанию стек произвольной глубины

Здравствуйте, уважаемые форумчане.

Цель простая, но в своих идеях не уверен.

Хочу организовать стек произвольной глубины с динамической памятью. Будет класс стека. Но ведь когда мы выделяем динамическую даже память, все равно нужно указывать СКОЛЬКО ее выделять. Как сделать глубину произвольную - запутался...

Подскажите please как это обычно делается!

Заранее спасибо!!!!!!
tiger() вне форума Ответить с цитированием
Старый 09.04.2011, 16:36   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от tiger() Посмотреть сообщение
Здравствуйте, уважаемые форумчане.

Цель простая, но в своих идеях не уверен.

Хочу организовать стек произвольной глубины с динамической памятью. Будет класс стека. Но ведь когда мы выделяем динамическую даже память, все равно нужно указывать СКОЛЬКО ее выделять. Как сделать глубину произвольную - запутался...

Подскажите please как это обычно делается!

Заранее спасибо!!!!!!
Связанный список.
BOBAH13 вне форума Ответить с цитированием
Старый 09.04.2011, 16:37   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
Но ведь когда мы выделяем динамическую даже память, все равно нужно указывать СКОЛЬКО ее выделять.
И следить за тем сколько ее использовано и ДОБАВЛЯТЬ (выделять новый кусок) при необходимости.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 09.04.2011, 16:46   #4
tiger()
Пользователь
 
Регистрация: 09.04.2011
Сообщений: 49
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
И следить за тем сколько ее использовано и ДОБАВЛЯТЬ (выделять новый кусок) при необходимости.
У меня в классе стека есть функция push. то есть в каждом push-е выделять одно место для каждого значения? у меня такая мысль была, но как тогда можно хранить указатели?
tiger() вне форума Ответить с цитированием
Старый 09.04.2011, 18:49   #5
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

делаете функцию

void push(int a);

которая принимает новое значение, потом увеличиваете размер стека на 1, перевыделяете память, сохраняете число
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 10.04.2011, 07:39   #6
tiger()
Пользователь
 
Регистрация: 09.04.2011
Сообщений: 49
По умолчанию

Цитата:
Сообщение от kaljan775 Посмотреть сообщение
делаете функцию

void push(int a);

которая принимает новое значение, потом увеличиваете размер стека на 1, перевыделяете память, сохраняете число
kaljan775, что имеется ввиду под "перевыделять память"?
например, я положил в стек первое число

a=new int(1);
a=value;

когда понадобится положить второе

b=new int(1);
b=value;

как-то можно ранее записанные значения заново переписать?

Последний раз редактировалось tiger(); 10.04.2011 в 07:58.
tiger() вне форума Ответить с цитированием
Старый 10.04.2011, 10:53   #7
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

Ошибочка 8(
Ёж птица гордая, пока не пнешь не полетит.
Ezhuk вне форума Ответить с цитированием
Старый 12.04.2011, 18:23   #8
tiger()
Пользователь
 
Регистрация: 09.04.2011
Сообщений: 49
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Связанный список.
ВОВАН13, спасибо, разбираюсь. кажется, то что надо =)
tiger() вне форума Ответить с цитированием
Старый 12.04.2011, 21:52   #9
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Код:
struct stack{
  int value;
  stack *next;
};

void push(stack *s,int n){
  while(stack->next)stack=stack->next;
  stack->next=new stack;
  stack=stack->next;
  stack->value=n;
  stack->next=0;
};
как-то так
лучше, наверное, добавлять в начало - быстрее будет работать
но принцип тот же
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 10.05.2011, 12:42   #10
tiger()
Пользователь
 
Регистрация: 09.04.2011
Сообщений: 49
По умолчанию

Granus, благодарю! пригодилось.
правда я сделал добавление в начало, но кое-что в другом месте заюзал.

p.s. в функции наверное имелось ввиду s->next везде?
tiger() вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввод произвольной строки в C++ SrgGld Общие вопросы C/C++ 0 24.10.2010 00:02
расчет глубины погружения тела Hitman15 Помощь студентам 2 01.05.2010 21:00
Увеличение "глубины" вызова рекурсивных процедур Mixim Общие вопросы Delphi 1 06.03.2010 12:42
Работа с DIB, изменение глубины цвета JOHNKZ1 Мультимедиа в Delphi 7 18.12.2008 06:52
Как отобразить категории, имеющие вложенность произвольной глубины?! Aska БД в Delphi 4 31.10.2007 01:03