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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2014, 05:32   #1
Nata Golden rose
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 20
По умолчанию Подскажите пожалуйста как динамически правильно расширить стэк

Подскажите пожалуйста как правильнее расширить стэк при добавлении элементов N длины то есть их может быть огромное количество и стэк должен постоянно расширятся при добавлении каждого элемента

вот функция которая добавляет элементы в стэк

Код:
void empiler(struct node *pNode)
{
   size_t len;
   pile[numbElemPile]=pNode;
   numbElemPile++;
 
}
а вот так я объявила стэк в начале программы он всего на 32 объявлен а должен быть расширяюший


Код:
struct node * pile[32];
может быть объявить его типо

Код:
struct node * pile = malloc(sizeof(struct node));
и потом увеличивать с каждым вызовом функции? Посоветуйте что нибудь пожалуйста а то наш препод будет по всякому пытать программку, и нужно что то, что не сломается
Nata Golden rose вне форума Ответить с цитированием
Старый 22.05.2014, 08:03   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Используй динамический список для такого резинового стека а не массив.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.05.2014, 19:01   #3
Nata Golden rose
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 20
По умолчанию

нужен именно массив

я вот сделала ошибок не показывает, но я не знаю правильно ли он работает:

Код:
 void empiler(struct node *pNode)
{
   if (!pile){
   *pile = malloc(sizeof(*pNode)*2);}
  
   pile[numbElemPile]=pNode;
   numbElemPile++;
}
а вначале он объявлен вот так : struct node * pile[10];
Nata Golden rose вне форума Ответить с цитированием
Старый 23.05.2014, 19:10   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Nata Golden rose

стэк должен постоянно расширятся при добавлении каждого элемента
...
нужен именно массив



размер массива увеличить нельзя, расходимся, посоны.
Rififi вне форума Ответить с цитированием
Старый 23.05.2014, 19:14   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я бы не сказал что это правильно. Может мои коллеги кто хорошо знает Си не согласятся, но:
Код:
node* redim(node* array,int Len){
 node *res=0;
 if(Len!=0){
  res=malloc(sizeof(node)*Len);
  if(array)  memcpy(res,array,sizeof(node)*Len);
  else memset(res,0,sizeof(node)*Len);
 }
 if(array) delete [] array;
 return res;
}
Соответственно
Код:
 node *array=redim(0,10);
Создаст массив в 10 элементом, а потом
Код:
 array=redim(array,20);
Расширит его до 20 с сохранением инфы.
Это я с потолка, не проверял. Не против критики от коллег.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите пожалуйста правильно ли я, динамически распределяю память? Nata Golden rose Общие вопросы C/C++ 10 17.05.2014 21:34
Подскажите как решить, пожалуйста Dimon4ic Паскаль, Turbo Pascal, PascalABC.NET 0 10.06.2009 20:17
подскажите пожалуйста что не правильно в скрипте. 6AT9 JavaScript, Ajax 1 25.11.2008 00:21
Подскажите пожалуйста, как выразить x в степени n? Dimanw92 Паскаль, Turbo Pascal, PascalABC.NET 6 03.10.2008 10:47
Подскажите, как правильно сделать страничку чтобы ее видели поисковики kutt HTML и CSS 5 02.10.2008 21:04