Форум программистов, компьютерный форум CyberForum.ru

Удаление в stack - C++

Восстановить пароль Регистрация
 
summerokk
8 / 8 / 2
Регистрация: 17.06.2013
Сообщений: 136
17.06.2013, 22:35     Удаление в stack #1
Помогите пожалуйста решите проблему. Мне надо создать структуру данных через stack

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void stack :: add(printer addp)
{
  qelem *temp;
  temp=new qelem;
  temp->prin=addp;
  temp->next=NULL;
  if (first!=NULL) {
    last->next=temp;
    last=temp;
  }
  else {
    first=temp;
    last=temp;
  }
}
 
void stack :: get(printer &addp)
{
  qelem *temp;
  addp=first->prin;
  temp=first;
  first=first->next;
  delete temp;
  if (first==NULL) {
    last=NULL;
  }
}
вот мой код . проблема в том что не правильно реализуется удаление . он удаляет сначала 1-й элемент . Помогите пожалуйста исправить.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2013, 22:35     Удаление в stack
Посмотрите здесь:

C++ Stack overflow
класс stack C++
C++ Stack was corrupted
C++ STL stack
stack C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
18.06.2013, 01:48     Удаление в stack #2
В стеке и должен удаляться только 1й элемент! Иначе это не стек.
summerokk
8 / 8 / 2
Регистрация: 17.06.2013
Сообщений: 136
18.06.2013, 01:54  [ТС]     Удаление в stack #3
Вроде правило стека это первым удаляется элемент который добавился последним .
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
18.06.2013, 01:58     Удаление в stack #4
Цитата Сообщение от summerokk Посмотреть сообщение
Вроде правило стека это первым удаляется элемент который добавился последним .
Ну и? А я о чём говорю? Разве не об этом?
А вот ты спрашиваешь наоборот, чтобы в стеке произвольный элемент удалялся. Так нельзя. Это уже не стек будет.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.06.2013, 02:27     Удаление в stack #5
Если last - это последний добавленный (вершина стека):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void stack :: add(printer addp)
{
  qelem *temp;
  temp=new qelem;
  temp->prin=addp;
  temp->next=NULL;
  if (first!=NULL) {
    temp ->next = last;
    //last->next=temp;
    last=temp;
  }
  else {
    first=temp;
    last=temp;
  }
}
 
void stack :: get(printer &addp)
{
  qelem *temp;
  addp=last ->prin;
  //temp=first;
  temp = last ->next;
  //first=first->next;
  delete last;
  last = temp;
  if (temp==NULL) {
    first = NULL;
  }
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
18.06.2013, 02:33     Удаление в stack #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Если last - это последний добавленный (вершина стека):
Я понял проблему, наконец-то. Его не устраивало, что удаляется "first".

вот только менять это? Стек можно и нужно реализовывать на односвязном списке, а значит добавлять/удалять именно first. Если вас смущает слово first, можете называть его как хотите, можете назвать голову стека last. Суть одна.
gray_fox
18.06.2013, 02:37
  #7

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Стек можно и нужно реализовывать на односвязном списке
Ну так то вроде не обязательно, или это в контексте вопроса создателя темы?

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2013, 02:41     Удаление в stack
Еще ссылки по теме:

C++ Есть ли связь между STL-stack и stack - высокопроизводительная память?
STACK STL C++
Ошибка: "Unhandled exception: Stack cookie instrumentation code detected a stack-based buffer overrun" C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.06.2013, 02:41     Удаление в stack #8
У ТС путаница с добавлением-удалением. Добавляет к last, а удаляет first.

Добавлено через 47 секунд
Цитата Сообщение от gray_fox Посмотреть сообщение
или это в контексте вопроса создателя темы?
В контексте кода ТС.
Yandex
Объявления
18.06.2013, 02:41     Удаление в stack
Ответ Создать тему
Опции темы

Текущее время: 05:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru