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

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

Войти
Регистрация
Восстановить пароль
 
DemetriusGT
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 13
#1

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

18.06.2016, 01:14. Просмотров 368. Ответов 4
Метки нет (Все метки)

Подскажите, как удалить предпоследний элемент из стека. В данном примере сделал удаление последнего элемента:
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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2016, 01:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удалить предпоследний элемент из стека (C++):

Структура стек (: добавить элемент в стек, удалить элемент из стека, получить значение с вершины стека, размер стека...) - C++
Всем привет,ребят помогите пожалуйста с лабой,вообще без понятия про стеки:( Может кто то делал,или встречался с таким заданием: ...

Удалить элемент из стека по условию и добавить элемент в начало стека - C++
Здравствуйте, помогите пожалуйста исправить(дописать) программы. 1). Нужно удалить элемент, находящийся в середине стека , если число...

Удалить последний элемент из стека - C++
Здравствуйте.Помогите удалить последний элемент из стека.У меня почему-то удаляется предпоследний,не понимаю в чем ошибка.Заранее спасибо ...

Найти и удалить минимальный элемент из стека - C++
Здравствуйте, помогите пожалуйста с задачей. Нужно найти и удалить минимальный элемент из стека.

Удалить каждый второй элемент стека - C++
Заполнить стек значениями произвольно выбранного типа. Удалить каждый второй элемент стека. Есть стек,как удалять элементы? ...

Если все элементы «двусвязного списка» отрицательны, то удалить элемент «стека» - C++
помогите,пожалуйста... -Если все элементы «двусвязного списка» отрицательны, то удалить элемент «стека». Результат проверить.

4
olya7
477 / 294 / 91
Регистрация: 18.02.2013
Сообщений: 684
18.06.2016, 01:20 #2
C++
1
 Remove(MyList, i-1);
в 72 строке
0
DemetriusGT
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 13
18.06.2016, 02:05  [ТС] #3
Задача еще актуальна. Нужно удалить ТОЛЬКО предпоследний элемент. Товарищи, хотя бы алгоритм подкиньте
0
Apostol584
238 / 144 / 72
Регистрация: 26.11.2012
Сообщений: 371
Завершенные тесты: 2
18.06.2016, 07:59 #4
достаем верхний элемент стека и сохраняем его.
удаляем верхний элемент стека.
добавляем в стек сохраненный элемент.
0
olya7
477 / 294 / 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; // удаляем последний
 
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2016, 10:23
Привет! Вот еще темы с ответами:

Удалить элемент, находящийся в середине стека, если число элементов нечётное, иначе - два средних элемента - C++
ЗДРАВСТВУЙТЕ,ВОТ ЗАДАЧА: Удалить элемент, находящийся в середине стека , если число элементов нечетное, или 2 средних элемента, если...

Определить предпоследний отрицательный элемент в последовательности чисел - C++
Определить предпоследнее отрицательный элемент в заданном числе. БЕЗ использования массива...

Поменять максимальный и предпоследний элемент массива местами - C++
#include &lt;iostream&gt; using namespace std; int main() { int a,maxI,max; cout &lt;&lt; &quot;vvedite massiv=&quot; &lt;&lt; endl; for (int i =...

поменять местами первый и последний элемент, второй и предпоследний и так далее - C++
Задан масив целых чисел.Распечатать преобразованный массив: поменять местами первый и последний элемент, второй и предпоследний и так...


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

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

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