удаление элемента из стека по индексу
необходимо удалить из стека элемент с указанием индекса, получается лишь сделать чтобы удалялись все элементы до индексированного элемента, помогите исправить.
#include "pch.h"
#include <stdio.h>
#include <iostream>
#include <Windows.h>
using namespace std;
struct node {
int x;
struct node* next;
};
typedef struct node *Node_ptr;
Node_ptr Add(int n)//создание стека
{
Node_ptr p = NULL, pred = NULL;
cout << "Введите элементы стека: \n";
int m;
for (int i = 0; i < n; i++)
{
p = new struct node;
cin >> m;
p->x= m;
p->next = pred;
pred = p;
m = 0;
}
return p;
}
void Show(Node_ptr p) //просмотр стека
{
cout << "Вывод стека: ";
Node_ptr y = p;
while (y != NULL)
{
cout << y->x << " "; y = y->next;
}
cout << endl;
}
void delete3(node *&N, int f) //удаление по индексу
{
for (int i = 0; i < f; i++)
{
node *temp = N;
N = N->next;
delete temp;
}
cout << "\nЛишние значения удалены!" << endl;
}
int main()
{
setlocale(LC_ALL, "Russian");
Node_ptr a = Add(5);
Show(a);
delete3(a,2);
Show(a);
system("pause");
}
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
С классического стека так удалить нельзя. Но это можно сделать по другому (может и не так эффективно).
Просто создаете ещё один стек и перекладываете туда элементы, пока не найдете нужный индекс. Вот его уже не нужно. А потом с вспомогательного стека назад в основной. Правда нужно реализовать функцию pop:)
Ваша же функция delete пытается удалить все элементы до заданного индекса.
P.S. если что - в коде не плюсы, а чистый почти си.