Удалить из стека элементы меньше 10
В стек вводятся числа, нужно вывести полный стек, после чего, стек в котором удалены элементы меньше 10. Пример кода, когда удаляются все элементы стека:
#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <stdio.h>
#include <math.h>
#include <malloc.h>
struct kkk
{
float elem[15];
int top; // Индекс верхнего элемента стека
};
struct kkk* st, * element; // указатели
void Init(struct kkk* st) // инициализация
{
st->top = NULL;
}
void Push(struct kkk* st, float f) // Вношу элемент в стек
{
if (st->top < 15)
{
st->elem[st->top] = f;
st->top++;
}
else
printf("Стек полный \n");
}
float Pop(struct kkk* st) // удаляю элемент из стека
{
float el;
if ((st->top) > 0)
{
st->top--;
el = st->elem[st->top];
return el;
}
else
{
printf("Стек пустой \n");
return 0;
}
}
float Vulychtop(struct kkk* st) // удаляю вершину стека
{
if ((st->top) > 0) {
return(st->elem[st->top - 1]);
}
else {
printf("Стек пустой!\n");
return 0;
}
}
int Gettop(struct kkk* st) // Верхний элемент стека бкз удаления
{
return(st->top);
}
int Isempty(struct kkk* st) // Проверка, пустой ли стек
{
if ((st->top) == 0)
return 1;
else return 0;
}
void Vuvid(struct kkk* st) // Вывод всех элементов
{
int i;
i = st->top;
if (Isempty(st) == 1) return;
do {
i--;
printf("%f\n", st->elem[i]);
} while (i > 0);
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int i, n, k;
float znach;
element = (struct kkk*)malloc(sizeof(struct kkk));
Init(element);
printf("Введите кол-во элементов в стеке \n");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("Введите элемент %d: ", i);
scanf("%f", &znach);
Push(element, znach);
}
printf("В стеке %d элементов \n", Gettop(element));
printf("\n");
Vuvid(element);
printf("Верхний элемент %f\n", Vulychtop(element));
do {
printf("Элемент, который удаляется %f, ", Pop(element));
printf("В стеке осталось %d элементов \n", Gettop(element));
} while (Isempty(element) == 0);
return 0;
}