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

Удалить предпоследний элемент из стека - C++

Восстановить пароль Регистрация
 
DemetriusGT
 Аватар для DemetriusGT
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 13
18.06.2016, 01:14     Удалить предпоследний элемент из стека #1
Подскажите, как удалить предпоследний элемент из стека. В данном примере сделал удаление последнего элемента:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <string>
using namespace std;
 
struct List
{
    string x; //информационный элемент
    List *Next,*Head; //Голова стека и указатель на следующий элемент
};
 
void Add(string x, List *&MyList, int &i) //Принимаем элемент стека и указатель на стек, при этом говорим, что принимаемый указатель будет сам по себе указателем
{
    List *temp=new List; //Выделяем память для нового элемента
    temp->x=x; //Записываем в поле x принимаемый в функцию элемент x
    temp->Next=MyList->Head; //Указываем, что следующий элемент это предыдущий
    MyList->Head=temp; //Сдвигаем голову на позицию вперед
    ++i;
}
 
void Show(List *MyList) //Нужен только сам стек
{
    cout<<endl;
    List *temp=MyList->Head; //Объявляем указатель и Указываем ему, что его позиция в голове стека
    //с помощью цикла проходим по всему стеку
    while (temp!=NULL) //выходим при встрече с пустым полем
    {
        cout<<temp->x<<" "; //Выводим на экран элемент стека
        temp=temp->Next; //Переходим к следующему элементу
    }
    cout<<endl;
}
 
void ClearList(List *MyList)
{
    while (MyList->Head!=NULL) //Пока по адресу не пусто
    {
        List *temp=MyList->Head->Next; //Временная переменная для хранения адреса следующего элемента
        delete MyList->Head; //Освобождаем адрес обозначающий начало
        MyList->Head=temp; //Меняем адрес на следующий
    }
}
 
void Remove(List *MyList, int i)//такой же алгоритм удаления из середины
{
    int u=2;
    List *t=MyList->Head, *tek;
    if (t==NULL) {cout<<"\nОтсутствует список.\n"; return;}
    while (u<i) { t=t->Next;  ++u;}//temp = t 
    tek = t->Next;
    delete tek; // удаляем последний
    t->Next=NULL;
    tek=t;
}
 
int main()
{
    setlocale(0, "");
    system("color 30");
    system("title Name");
    system("cls");
    string x;
    int i=0;
    List *MyList=new List; //Выделяем память для стека
    MyList->Head=NULL; //Во избежание ошибок инициализируем первый элемент
    cout<<"Вводи текст (для окончания введи ноль): "; 
    while (x!="0")
    {
        cin>>x; 
        if (x!="0") Add(x, MyList, i);
    } //Заносим данные в стек
    Show(MyList); //Выводим стек на экран в обратном порядке т.к комп читает справа налево
    Remove(MyList, i);
    Show(MyList);
    ClearList(MyList); //Очищаем память.
    delete MyList->Head;
    delete MyList;
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2016, 01:14     Удалить предпоследний элемент из стека
Посмотрите здесь:

Определить предпоследний отрицательный элемент в последовательности чисел C++
Если все элементы «двусвязного списка» отрицательны, то удалить элемент «стека» C++
C++ Работа со стеком (как достать элемент из стека?)
Найти и удалить минимальный элемент из стека C++
Функция изымает элемент из стека и возвращает его значение C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
olya7
476 / 293 / 91
Регистрация: 18.02.2013
Сообщений: 684
18.06.2016, 01:20     Удалить предпоследний элемент из стека #2
C++
1
 Remove(MyList, i-1);
в 72 строке
DemetriusGT
 Аватар для DemetriusGT
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 13
18.06.2016, 02:05  [ТС]     Удалить предпоследний элемент из стека #3
Задача еще актуальна. Нужно удалить ТОЛЬКО предпоследний элемент. Товарищи, хотя бы алгоритм подкиньте
Apostol584
234 / 140 / 71
Регистрация: 26.11.2012
Сообщений: 363
Завершенные тесты: 2
18.06.2016, 07:59     Удалить предпоследний элемент из стека #4
достаем верхний элемент стека и сохраняем его.
удаляем верхний элемент стека.
добавляем в стек сохраненный элемент.
olya7
476 / 293 / 91
Регистрация: 18.02.2013
Сообщений: 684
18.06.2016, 10:23     Удалить предпоследний элемент из стека #5
C++
1
2
3
4
5
6
7
8
9
10
11
void Remove(List *MyList, int i)//такой же алгоритм удаления из середины
{
    int u=2;
    List *t=MyList->Head, *tek;
    if (t==NULL) {cout<<"\nОтсутствует список.\n"; return;}
    while (u<i) { t=t->Next;  ++u;}//temp = t
    tek = t->Next;
    t->Next=tek->Next;
    delete tek; // удаляем последний
 
}
Yandex
Объявления
18.06.2016, 10:23     Удалить предпоследний элемент из стека
Ответ Создать тему
Опции темы

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