用数组实现栈与数组实现表的原理一样,删除表的一些功能就是栈了
#include<stdio.h>
#include<stdlib.h>
int size;
typedef int StackItem;
typedef struct sstack*Stack;
typedef struct sstack
{
int top;
int maxtop;//栈顶位置的最大值
StackItem *data;
}Sstack;
//*******************************
//栈的初始化
Stack StackInit(int size)
{
Stack S;
S=(Stack)malloc(sizeof(Sstack));
S->data=(StackItem *)malloc(sizeof(StackItem)*size);
S->maxtop=size;
S->top=-1;
return S;//因为数组第一个数从位置0开始存,所以初始化为-1;
}
//*******************************
//判断栈是否为空
int StackEmpty(Stack S)
{
return S->top<0;
}
//*******************************
//判断栈是否为满
int StackFull(Stack S)
{
return S->top==S->maxtop;
}
//*******************************
//取栈顶元素
StackItem StackTop(Stack S)
{
if(StackEmpty(S))
{
printf("Stack is empty");
exit(0);
}
else return S->data[S->top];
}
//*******************************
//新元素入栈
void Push(StackItem x,Stack S)
{
if(StackFull(S))
{
printf("Stack is full");
exit(0);
}
else
S->data[++S->top]=x;
}
//*******************************
//删除栈顶元素
StackItem Pop(Stack S)
{
if(StackEmpty(S))
{
printf("Stack is empty");
exit(0);
}
return S->data[S->top--];
}
int main()
{
Stack S;
size=10;
S=StackInit(size);
//*******************************
//元素入栈
printf("元素入栈:\n");
for(int i=1;i<=10;i++)
{
Push(i,S);
printf("%d ",i);
}
printf("\n元素出栈:\n");
for(i=1;i<=10;i++)
printf("%d ",Pop(S));
return 0;
}