Я пытаюсь создать функцию, которая получит некоторый стек с целыми числами и «n» (число для удаления). Функция проверит стек и удалит элемент, если найдет его. Стек должен оставаться в том же порядке после удаления элемента «n». Я пытаюсь скопировать все элементы во временный стек, а когда нахожу элемент, не копировать его. После этого я хочу вернуть все элементы в первый стек. Что-то не так в моей функции. Я строю свою функцию вокруг некоторого кода, который я нашел в сети.
#include<stdio.h>
#define MAX 3
typedef int item;
typedef struct
{
int TOP;
int ele[MAX];
}Stack;
void init(Stack* s)
{
s->TOP = -1;
}
int isFull(Stack* s)
{
if (s->TOP == MAX - 1)
return 0;
return -1;
}
int isEmpty(Stack* s)
{
if (s->TOP == -1)
return 0;
return -1;
}
void push(Stack* s, int item)
{
if (!isFull(s))
{
printf("\nStack is full");
return;
}
s->TOP = s->TOP + 1;
s->ele[s->TOP] = item;
}
int pop(Stack* s, int* item)
{
if (!isEmpty(s))
{
printf("\nStack is empty");
return -1;
}
*item = s->ele[s->TOP];
s->TOP = s->TOP - 1;
return 0;
}
void func(Stack* s, item num)
{
//Check stack
if (s->TOP == -1)
{
printf_s("is empty");
return 0;
}
Stack temp; //def temporary stack
init(&temp); //init temporary stack
item current=0;
while (s->TOP != -1)
{
pop(&s, ¤t);
if (current != num)
{
push(&temp, current);
}
}
while (!isEmpty(&temp))
{
pop(&temp, ¤t);
push(&s, current);
}
while (s->TOP != -1)
{
pop(&s, ¤t);
{
printf_s("\nPoped Item : %d", current);
}
}
}
int main()
{
Stack s;
item num = 20;
init(&s);
push(&s, 4);
push(&s, 20);
push(&s, 11);
func(&s, num); //delete specific element in stack
getch();
return 0;
}
Я пытался исправить все моменты, но появляются все те же предупреждения ... и код не работает. == >>> Новая версия:
#include<stdio.h>
#define MAX 3
typedef int item;
typedef struct
{
int top;
int ele[MAX];
}Stack;
void init(Stack* s)
{
s->top = -1;
}
int isFull(Stack* s)
{
return s->top == MAX - 1;
}
int isEmpty(Stack* s)
{
return s->top != -1;
}
void push(Stack* s, int item)
{
if (isFull(s))
{
printf("\nStack is full");
return;
}
++s->top; //can be written as: s->TOP = s->TOP + 1;
s->ele[s->top] = item;
}
int pop(Stack* s, int* item)
{
if (!isEmpty(s))
{
printf("\nStack is empty");
return -1;
}
*item = s->ele[s->top];
--s->top; //can be written as: s->top = s->top - 1;
return 0;
}
void func(Stack* s, item num)
{
//Check stack
if (s->top == -1)
{
printf_s("is empty");
return;
}
Stack temp; //def temporary stack
init(&temp); //init temporary stack
item current = 0;
while (s->top != -1)
{
pop(s, ¤t);
if (current != num)
{
push(&temp, current);
}
}
while (!isEmpty(&temp))
{
pop(&temp, ¤t);
push(s, current);
}
while (s->top != -1)
{
pop(&s, ¤t);
{
printf_s("\nPoped Item : %d", current);
}
}
}
int main()
{
Stack s;
item num = 20;
init(&s);
push(&s, 4);
push(&s, 20);
push(&s, 11);
func(&s, num); //delete specific element in stack
getch();
return 0;
}