Создать проект, демонстрирующий работу со стеком, организованным на основе списка. Все операции со стеком реализовать через функции. Разработать функцию удаления элементов стека, кратных 3, если такие есть. Дополнить проект функцией очистки стека clear(), сохранения в файл и считывания из файла. Проблема, собственно, в удалении, вроде как удаляет, но при проверке выводом получается совсем не то и выводит ошибку. Косяк явно в функции, но решить не получается. Буду очень признательна за помощь
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <fstream>
using namespace std;
struct STACK {
int Name;
STACK *next, *prev, *head;
};
int _tmain(int argc, _TCHAR* argv[])
{
int buff[100];
setlocale(LC_CTYPE, "Russian");
STACK* Nstk = NULL;
int n, chislo, i;
cout << "Сколько чисел необходимо ввести?" << endl;
cin >> n;
for (i = 0; i <n; i++)
{
cout << "Введите число" << endl;
cin >> chislo;
buff[i] = chislo;
push(chislo, Nstk);
}
delete3(Nstk);
return 0;
}
void delete3(STACK *&Nstk)
{
STACK *temp = Nstk;
STACK *tmp;
while (temp) //сама функция удаления//
{
if ((temp->Name)%3==0)
{
tmp = temp;
temp = temp->next;
delete tmp;
}
temp = temp->next;
}
cout << "\nЛишние значения удалены!" << endl;
cout << "____________" << endl;
}
void push(int strN, STACK *&Nstk)
{
STACK *tmp = new STACK;//выделение памяти для нового элемента
tmp->Name = strN;//запись элемента в поле
tmp->next = Nstk;
Nstk = tmp;
}
Давайте смотреть.
struct STACK {
int Name;
STACK *next, *prev, *head;
};
зачем здесь поля prev и head?
buff[i] = chislo; В чем смысл этой строки?
void delete3(STACK *&Nstk)
{
STACK *temp = Nstk;
STACK *tmp;
while (temp) //сама функция удаления//
{
if ((temp->Name) %3 == 0)
{
tmp = temp;
temp = temp->next;
delete tmp;
}
temp = temp->next;
}
cout << "\nЛишние значения удалены!" << endl;
cout << "____________" << endl;
}
здесь неправильно почти все
temp = temp->next;Как должно быть
void delete3(STACK *&Nstk) {
while (Nstk) {
if ((Nstk->Name) % 3 == 0) {
STACK *temp = Nstk;
Nstk = Nstk->next;
delete temp;
} else
Nstk = Nstk->next;
}
cout << "\nЛишние значения удалены!" << endl;
cout << "____________" << endl;
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости