#include<stdio.h>//顺序栈
#include<stdlib.h>
#define MAXSIZE 100
#define YICHUHOU 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef struct Stack
{
int* top;
int* base;
int capacity;
}SqStack;
Status Initstack(SqStack* S)
{
S->base = (int*)malloc(MAXSIZE * sizeof(int));
if (!S->base) exit(OVERFLOW);
S->top = S->base;
S->capacity = MAXSIZE;
return OK;
}
Status Push(SqStack* S, int e)
{
if (S->top - S->base >= S->capacity)
{
S->base = (int*)realloc(S->base, (YICHUHOU + S->capacity) * (sizeof(int)));
if (!S->base) exit(OVERFLOW);
S->top = S->base + S->capacity;
S->capacity += YICHUHOU;
}
*S->top = e;
S->top++;
return OK;
}
Status Pop(SqStack* S, int& e)
{
if (S->top == S->base)return ERROR;
--S->top;
e = *S->top;
return OK;
}
Status Gettop(SqStack* S, int &e)
{
if (S->top == S->base)return ERROR;
e = *(S->top - 1);
return e;
}
void print(SqStack* S)
{
do
{
S->top--;
printf("%-5d", *(S->top));
} while (S->top != S->base);
}
int main()
{
SqStack S;
Initstack(&S);
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
int h;
printf("输入入栈的第%d个元素:", i);
scanf("%d", &h);
Push(&S, h);
}
//print(&S);//可以打印出栈中的元素
printf("\n");
int o, m;
o = Gettop(&S, m);
printf("栈顶元素:");
printf("%d\n", o);
for (int k = 0; k < n ; k++)
{
int e;
Pop(&S, e);
printf("元素%d出栈成功\n", e);
}
return 0;
}
顺序栈
最新推荐文章于 2023-09-19 21:52:00 发布