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

|
Здравствуйте, уважаемые форумчане. Цель простая, но в своих идеях не уверен. Хочу организовать стек произвольной глубины с динамической памятью. Будет класс стека. Но ведь когда мы выделяем динамическую даже память, все равно нужно указывать СКОЛЬКО ее выделять. Как сделать глубину произвольную - запутался... Подскажите please как это обычно делается! Заранее спасибо!!!!!!
|
|
|
|
|
Apr 9 2011, 13:17
|
Частый гость
 
Группа: Участник
Сообщений: 91
Регистрация: 26-05-10
Пользователь №: 57 544

|
Цитата(Methane @ Apr 9 2011, 17:50)  Память, виртуальна. Физически она появляется только когда происходит запись в нее. ну например вызвали функцию push, выделили память new(1). и так каждый раз? непонятно тогда как хранить указатели...
|
|
|
|
|
Apr 9 2011, 17:02
|
Местный
  
Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874

|
Цитата(Methane @ Apr 9 2011, 17:23)  список что-ли нужен?
|
|
|
|
|
Apr 10 2011, 03:36
|
Частый гость
 
Группа: Участник
Сообщений: 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,... ?
|
|
|
|
|
Apr 10 2011, 13:15
|
Местный
  
Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874

|
Цитата(elusive @ Apr 10 2011, 07:36)  в моем задании сказано использовать динамическую память, оператор new, про списки не указывается. в c++ есть такая штука - vector, может быть об этом речь? или надо самому реализацию стека сделать? тогда через односвязный список
|
|
|
|
|
Apr 11 2011, 06:17
|

Частый гость
 
Группа: Участник
Сообщений: 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 сек "на коленке" набросал, чтоб идею пояснить
Сообщение отредактировал nk@ - Apr 11 2011, 06:22
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|