📄 sack.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define StackSize 100//储存空间初始分配量
#define StackIncrement 10//储存空间分配增量
#define TURE 1
#define OVERFLOW 0
#define OK 1
#define ERROR 0
#define FALSE 0
typedef char ElemType;
typedef int Status;
typedef struct
{
ElemType *top;
ElemType *base;
int stacksize;
}SqStack;
Status StackTraverse(SqStack S,Status (*visit)());
Status InitStack(SqStack **S)
{
(*S)=(SqStack *)malloc(sizeof(SqStack));
(*S)->base=(ElemType *)malloc(StackSize*sizeof(ElemType));
if(!(*S)->base) exit(OVERFLOW);
(*S)->top=(*S)->base ;
(*S)->stacksize=StackSize;
return OK;
} //初始化栈
Status GetTop(SqStack S,ElemType *e)
{
if(S.base==S.top) return ERROR;
e=(S.top-1);
return OK;
}//若栈不空,则用e返回S的栈顶元素,并返回OK,否则返回ERROW
Status Push(SqStack *S,ElemType e)
{
if(S->top-S->base>=S->stacksize)
{
S->base=(ElemType *)realloc(S->base,(StackSize+StackIncrement)*sizeof(ElemType));
if(!S->base) exit(OVERFLOW);
S->top=S->base+StackSize;
S->stacksize=StackSize+StackIncrement;
}
*(S->top++)=e;
return OK;
}//插入e为新的栈顶元素
Status Pop(SqStack *S,ElemType *e)
{
if(S->top==S->base) return ERROR;
*e=*--S->top;
return OK;
}//若栈不空,则删除S栈顶元素,用e返回其值,并返回OK,否则返回ERROW
Status StackEmpty(SqStack S)
{
if(S.top==S.base)
return TURE;
else return FALSE;
}
Status Print(ElemType *e)
{
printf("%c\n",*e);
}
Status StackTraverse(SqStack S,Status (*visit)())
{
ElemType *p,*q;
p=S.base ;q=S.top;
while(p!=q)
visit(p++);
}
int main(int argc, char *argv[])
{
SqStack *s;ElemType e;char ch;
InitStack(&s);
printf("输入初始栈\n");
while((ch=getchar()) !='\n')
{
Push(s,ch);
}
StackTraverse(*s,Print);
printf("新元素入栈\n");
scanf("%c",&ch);
Push(s,ch);
StackTraverse(*s,Print);
printf("出栈\n");
while(! StackEmpty(*s))
{
Pop(s,&e) ;
printf("%c\n",e);
}
system("PAUSE");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -