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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
summerokk
8 / 8 / 2
Регистрация: 17.06.2013
Сообщений: 139
#1

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

17.06.2013, 22:35. Просмотров 319. Ответов 7
Метки нет (Все метки)

Помогите пожалуйста решите проблему. Мне надо создать структуру данных через 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++):

Есть ли связь между STL-stack и stack - высокопроизводительная память? - C++
Куча источников, как всегда много отсебятины, в общем я запутался...

Ошибка: "Unhandled exception: Stack cookie instrumentation code detected a stack-based buffer overrun" - C++
Не могу понять почему значение ChoiceOfPlayer меняется и почему NumberOfRow и NumberOfColumn всегда последние значение цикла. Помогите...

stack - C++
не могу норм прокомпилировать прогу, вот код, подскажите что не так! #include <stack> #include <iostream> int main() { const int...

Реализация stack - C++
Задание реализовать stack, первым делом написал добавление элемента и показ всего stack, заполнив его цифрами от 0 до 9, но при показе...

Контейнер stack - C++
есть функция, которая возвращает контейнер stack(точнее ссылку на его верхний элемент return binary.top();). как можно достать все...

класс stack - C++
Определите в программе класс stack, реализующий стек, который можно использовать для хранения символов: #define SIZE 10 //...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
18.06.2013, 01:48 #2
В стеке и должен удаляться только 1й элемент! Иначе это не стек.
summerokk
8 / 8 / 2
Регистрация: 17.06.2013
Сообщений: 139
18.06.2013, 01:54  [ТС] #3
Вроде правило стека это первым удаляется элемент который добавился последним .
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
18.06.2013, 01:58 #4
Цитата Сообщение от summerokk Посмотреть сообщение
Вроде правило стека это первым удаляется элемент который добавился последним .
Ну и? А я о чём говорю? Разве не об этом?
А вот ты спрашиваешь наоборот, чтобы в стеке произвольный элемент удалялся. Так нельзя. Это уже не стек будет.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.06.2013, 02:27 #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
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
18.06.2013, 02:33 #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Если last - это последний добавленный (вершина стека):
Я понял проблему, наконец-то. Его не устраивало, что удаляется "first".

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

Не по теме:

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

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

Добавлено через 47 секунд
Цитата Сообщение от gray_fox Посмотреть сообщение
или это в контексте вопроса создателя темы?
В контексте кода ТС.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2013, 02:41
Привет! Вот еще темы с ответами:

Stack was corrupted - C++
Будьте добры, объясните, почему такая ошибку выдает: Run-Time Check Failure #2 - Stack around the variable 'My' was corrupted. ...

класс stack - C++
Всем привет))помогите пожалуйста....нужна прога на тему шаблоны функций и классов,при чём дан класс stack.Перегрузить операции "+"-добавить...

Класс stack - C++
нужен пример класса стек типа char (запихать строку в стек)

Создание stack - C++
Выдаёт ошибку на создание стека почему-то. Не могу понять, почему именно. Вот сама ошибка: error C2143: синтаксическая ошибка:...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.06.2013, 02:41
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru