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

 
 
> стек произвольной глубины
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
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 18)
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
SysRq
сообщение Apr 11 2011, 09:15
Сообщение #16


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(elusive @ Apr 10 2011, 07:36) *
как можно организовать хранение неопределенного числа переменных a,b,... ?
Использовав память неопределенного размера sm.gif
Быть может, в задании вашем от вас хотят всего лишь new[]\delete[] для, к примеру, массива, с задаваемым с клавиатуры числом элементов, а вы городите что-то такое-эдакое...

--

Цитата(nk@ @ Apr 11 2011, 10:17) *
realloc() подходит идеально
Ага, фрагментация, двукратное потребление памяти, и непрогнозируемые задержки на копированое данных. Идеально для стека, да laughing.gif
Go to the top of the page
 
+Quote Post
nk@
сообщение Apr 11 2011, 13:38
Сообщение #17


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

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



Цитата(SysRq @ Apr 11 2011, 12:15) *
Использовав память неопределенного размера sm.gif
Быть может, в задании вашем от вас хотят всего лишь new[]\delete[] для, к примеру, массива, с задаваемым с клавиатуры числом элементов, а вы городите что-то такое-эдакое...
--
Ага, фрагментация, двукратное потребление памяти, и непрогнозируемые задержки на копированое данных. Идеально для стека, да laughing.gif

Я нигде не говорил, что это идеальное решение. Стек, в виде связанного стека - это, по Вашему, экономный расход памяти lol.gif
Go to the top of the page
 
+Quote Post
elusive
сообщение Apr 12 2011, 14:35
Сообщение #18


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

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



Цитата(Idle @ Apr 10 2011, 19:15) *
в c++ есть такая штука - vector, может быть об этом речь?
или надо самому реализацию стека сделать? тогда через односвязный список


Idle, спасибо, разбираюсь. похоже на правду. кстати идея связанного списка возникала интуитивно) хорошо, про него много пишут.

nk@, вроде бы в плюсах нет аналога realloc. каюсь, если не указал язык.

Цитата(SysRq @ Apr 11 2011, 15:15) *
Быть может, в задании вашем от вас хотят всего лишь new[]\delete[] для, к примеру, массива, с задаваемым с клавиатуры числом элементов, а вы городите что-то такое-эдакое...


эх, если бы! sm.gif)))))))))))))
не, точно должен быть бездонный стек.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Apr 12 2011, 15:43
Сообщение #19


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

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



Цитата(elusive @ Apr 12 2011, 18:35) *
не, точно должен быть бездонный стек.


Бездонного ничего не бывает! В любом случае объем памяти - величина конечная.
Go to the top of the page
 
+Quote Post

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

 


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


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