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

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

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

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

17.06.2013, 22:35. Просмотров 317. Ответов 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
Посмотрите здесь:

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

Stack и указатели c++ - C++
Есть следующий Стэк #ifndef _LINKED_STACK #define _LINKED_STACK #include "StackInterface.h" #include "Node.h" template <...

Stack.top в c++ - C++
На VS при компиляции выходит ошибка (75ая строка): не существует подходящей функции преобразования из "Tree" в "Tree * Что я делаю не...

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

stack, потоки - C++
Добрый день! Является ли безопасным одновременная работа с stl'ным stack'ом в несколько потоков?

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
18.06.2013, 01:48     Удаление в stack #2
В стеке и должен удаляться только 1й элемент! Иначе это не стек.
summerokk
8 / 8 / 2
Регистрация: 17.06.2013
Сообщений: 139
18.06.2013, 01:54  [ТС]     Удаление в stack #3
Вроде правило стека это первым удаляется элемент который добавился последним .
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
18.06.2013, 01:58     Удаление в stack #4
Цитата Сообщение от summerokk Посмотреть сообщение
Вроде правило стека это первым удаляется элемент который добавился последним .
Ну и? А я о чём говорю? Разве не об этом?
А вот ты спрашиваешь наоборот, чтобы в стеке произвольный элемент удалялся. Так нельзя. Это уже не стек будет.
alsav22
5416 / 4812 / 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
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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
Еще ссылки по теме:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 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
Ответ Создать тему
Опции темы

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