реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> стек произвольной глубины
elusive
сообщение Apr 9 2011, 12:32
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 26-05-10
Пользователь №: 57 544



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

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

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

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

Заранее спасибо!!!!!!
Go to the top of the page
 
+Quote Post
Methane
сообщение Apr 9 2011, 12:50
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(elusive @ Apr 9 2011, 15:32) *
Подскажите please как это обычно делается!

Память, виртуальна. Физически она появляется только когда происходит запись в нее.
Go to the top of the page
 
+Quote Post
elusive
сообщение Apr 9 2011, 13:17
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 26-05-10
Пользователь №: 57 544



Цитата(Methane @ Apr 9 2011, 17:50) *
Память, виртуальна. Физически она появляется только когда происходит запись в нее.


ну например вызвали функцию push, выделили память new(1).
и так каждый раз? непонятно тогда как хранить указатели...
Go to the top of the page
 
+Quote Post
Methane
сообщение Apr 9 2011, 13:23
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(elusive @ Apr 9 2011, 16:17) *
ну например вызвали функцию push, выделили память new(1).
и так каждый раз? непонятно тогда как хранить указатели...

Нет. Я имею в виду что malloc память физически не выделяет. А если вы хотите с указателями, то есть двунаправленные списки.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Apr 9 2011, 15:27
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(Methane @ Apr 9 2011, 17:23) *
Нет. Я имею в виду что malloc память физически не выделяет. А если вы хотите с указателями, то есть двунаправленные списки.


Вы уж очень философски относитесь к понятию "выделяет". Так можно дойти до того, что ее "выделяет" начальник отдела снабжения.
Go to the top of the page
 
+Quote Post
Idle
сообщение Apr 9 2011, 17:02
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



Цитата(Methane @ Apr 9 2011, 17:23) *

список что-ли нужен?
Go to the top of the page
 
+Quote Post
Methane
сообщение Apr 9 2011, 17:12
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(Idle @ Apr 9 2011, 20:02) *
список что-ли нужен?

Ну откуда я знаю? Я что, телепат? Или хотя бы шизофреник?
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Apr 9 2011, 17:33
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(elusive @ Apr 9 2011, 16:17) *
ну например вызвали функцию push, выделили память new(1).
и так каждый раз? непонятно тогда как хранить указатели...


Для начала, ознакомьтесь с тем, как работают современные компиляторы и четко уясните себе, какие вообще типы памяти бывают. Хотя бы для того, чтобы ваши вопросы были более внятные.
Go to the top of the page
 
+Quote Post
elusive
сообщение Apr 10 2011, 03:36
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 26-05-10
Пользователь №: 57 544



Цитата(sergeeff @ Apr 9 2011, 22:33) *
Для начала, ознакомьтесь с тем, как работают современные компиляторы и четко уясните себе, какие вообще типы памяти бывают. Хотя бы для того, чтобы ваши вопросы были более внятные.


прошу прощения за невнятность, наверно я действительно так выражаюсь.

в моем задании сказано использовать динамическую память, оператор new, про списки не указывается.
вот момент, который остается туманным:

кладем в стек 1 число: a=new int(1); a=value;
кладем в стек еще 1 число: b=new int(1); b=value;

как можно организовать хранение неопределенного числа переменных a,b,... ?
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Apr 10 2011, 08:16
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(elusive @ Apr 10 2011, 06:36) *
прошу прощения за невнятность, наверно я действительно так выражаюсь.


Для начала, к примеру, вам сюда: http://www.dreamincode.net/forums/topic/10...-in-c-tutorial/
Go to the top of the page
 
+Quote Post
Idle
сообщение Apr 10 2011, 13:15
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



Цитата(elusive @ Apr 10 2011, 07:36) *
в моем задании сказано использовать динамическую память, оператор new, про списки не указывается.

в c++ есть такая штука - vector, может быть об этом речь?
или надо самому реализацию стека сделать? тогда через односвязный список
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Apr 10 2011, 14:34
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(Idle @ Apr 10 2011, 17:15) *
тогда через односвязный список


Вовсе не обязательно!
Go to the top of the page
 
+Quote Post
nk@
сообщение Apr 10 2011, 17:15
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 8-12-09
Пользователь №: 54 138



Цитата(sergeeff @ Apr 10 2011, 17:34) *
Вовсе не обязательно!

Намек понятен, тока realloc() не во всех реализациях stdlib имеется. Надо-бы топикстартеру платформу и ОС уточнить sm.gif
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Apr 10 2011, 19:23
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(nk@ @ Apr 10 2011, 21:15) *
Намек понятен, тока realloc() не во всех реализациях stdlib имеется. Надо-бы топикстартеру платформу и ОС уточнить sm.gif


А на кой в стеке realloc?
Go to the top of the page
 
+Quote Post
nk@
сообщение Apr 11 2011, 06:17
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 8-12-09
Пользователь №: 54 138



Цитата(sergeeff @ Apr 10 2011, 22:23) *
А на кой в стеке realloc?

Нужно выделить память под хранение данных стека.
Первый раз понятно - malloc().
Далее надо добавить в стек данных, для чего нужно увеличить "вместилище" стека. Как - realloc() подходит идеально.
А без realloc() - связаный список указателей.
Что-нить типа
CODE
static int *stack_mem = NULL;
static unsigned int stack_pointer = 0;
int* stack_push(int data)
{
stack_mem=(int* )realloc(stack_mem, (stack_pointer+1)*sizeof(int));
if(stack_mem==NULL) return NULL; //out of mem
stack_mem[stack_pointer++] = data;
return (stack_mem + stack_pointer - 1);
}
int* stack_pop(int* data)
{
if(stack_pointer)
{
*data = stack_mem[--stack_pointer];
return (stack_mem + stack_pointer);
}
return NULL; //no data in stack
}


PS: Код есс-но надо доработать, я его за 10 сек "на коленке" набросал, чтоб идею пояснить sm.gif

Сообщение отредактировал nk@ - Apr 11 2011, 06:22
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 13:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01486 секунд с 7
ELECTRONIX ©2004-2016