#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10
typedef struct stack
{
int date[MAXSIZE];
int top;
}SqStack,*SQ;
//栈的初始化,建立一个空栈
SQ IniStack()
{
SQ S;
S = (SQ)malloc(sizeof(SqStack));
S->top= -1;
return S;
}
int Push(SQ S, int e)
{
if(S->top==MAXSIZE-1)
return 0;
S->top++;
S->date[S->top]=e;
return 1;
}
void PRINTF(SQ S)
{
int i = 0;
if(S==NULL)
{
printf("栈已经销毁");
exit(0);
}
while(i<=S->top)
{
printf("%d ", S->date[i]);
i++;
}
}
//删除栈顶元素,并用E返回栈顶元素的值
int POP(SQ S,int *e)
{
if(S->top==-1)
return 0;
*e=S->date[S->top];
S->top--;
return 1;
}
//若栈存在用e返回栈顶元素
int GetTop(SQ S,int *e)
{
if(S->top==-1)
return 0;
*e=S->date[S->top];
return 1;
}
int DestroyStack(SQ *S)
{
*S=NULL;
}
int main()
{
SQ S = IniStack();
int e;
int temp;
int i=0;
printf("请输入你要几个元素入栈:");
scanf("%d",&e);
while(i < e)
{
if(Push(S,i+1))
i++;
else
{
printf("错误,栈已满");
exit(0);
}
}
PRINTF(S);
printf("\n请输入要删除栈顶的几个元素:");
scanf("%d",&e);
for(i=1;i<=e;i++)
{
if(POP(S,&temp))
printf("\n删除的栈顶元素为%d",temp);
else
{
printf("\n删除栈顶的%d个元素后栈已经为空",i-1) ;
break;
}
}
printf("\n");
if(GetTop(S,&e))
printf("\n返回当前栈顶元素为%d",e);
else
printf("\n空栈");
printf("\n");
DestroyStack(&S);
PRINTF(S);
return 0;
}
栈的顺序储存结构
最新推荐文章于 2021-07-27 12:59:07 发布