Удаление элемента стека

231
13 марта 2018, 03:01

Имеется код:

#include <iostream>
#include <limits>
#include <conio.h>
using namespace std;
struct stack {
    int inf;
    stack *head, *next;
};
void addElements(stack *&stack1);
void showStack(stack *stack1);
void clearStack(stack *stack1);
int menu();
void input(int &a);
void deleteMaxValue(stack *stack1);
int main() {
    stack *stack1 = new stack;
    stack1->head = NULL;
    while (true) {
        switch (menu())
        {
        case 1:
            cout << "Enter the element:" << endl;
            addElements(stack1);
            cout << "Element added" << endl;
            break;
        case 2:
            showStack(stack1);
            break;
        case 3:
            clearStack(stack1);
            break;
        case 4:
            deleteMaxValue(stack1);
            break;
        case 0:
            cout << "Press Enter if you want to exit" << endl;
            if (_getch() == 13) {
                delete stack1->head;
                delete stack1;
                return 0;
            }
            break;
        default:
            cout << "Choose 1-4 or 0" << endl;
            break;
        }
    }
}
void addElements(stack *&stack1) {
    int inf;
    input(inf);
    stack *temp = new stack;
    temp->inf = inf;
    temp->next = stack1->head;
    stack1->head = temp;
}
void showStack(stack *stack1) {
    cout << "Stack:" << endl;
    stack *temp = stack1->head;
    while (temp != NULL) {
        cout << temp->inf << " ";
        temp = temp->next;
    }
    cout << endl;
}
void clearStack(stack *stack1) {
    while (stack1->head != NULL) {
        stack *temp = stack1->head->next;
        delete stack1->head;
        stack1->head = temp;
    }
    cout << "Stack cleared" << endl;
}
int menu() {
    cout << "1 - add element" << endl;
    cout << "2 - show stack" << endl;
    cout << "3 - clear stack" << endl;
    cout << "4 - delete max element" << endl;
    cout << "0 - exit" << endl;
    int choise;
    input(choise);
    return choise;
}
void input(int &a) {
    while (true)
    {
        cin >> a;
        if (cin.good()) {
            break;
        }
        cout << "Wrong input" << endl;
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
}
void deleteMaxValue(stack *stack1) {
    stack *temp = stack1->head;
    int max = temp->inf;
    while (temp != NULL) {
        if (temp->inf > max) {
            max = temp->inf;
        }
        temp = temp->next;
    }
    while (temp != NULL) {
        if (temp->inf == max) {
            stack *temp1 = temp->next;
            delete temp;
            temp = temp1->head;
        }
        else {
            temp = temp->next;
        }
    }
}

Задача - удаление максимального элемента стека. Реализую удаление в функции deleteMaxValue, однако удаление не происходит. В чём ошибка?

READ ALSO
как посчитать (2n)!? [требует правки]

как посчитать (2n)!? [требует правки]

Вот код для факториала

226
Недопонимание с функцией select()

Недопонимание с функцией select()

Функция select() выглядит следующим образом

210
Создание очереди банка

Создание очереди банка

Стоит задача смоделировать очередь банкаПоискал различную инфу в интернете и остановился на книге Каррано

196
Проблема с кодировкой при работе с СУБД MySQL(Java JDBC)

Проблема с кодировкой при работе с СУБД MySQL(Java JDBC)

Здравствуйте при работе с СУБД MySQL возникла проблема с кодировкой русских символовВ базе данных все корректно отображаетсяи и в Java приложении...

221