📄 栈.txt
字号:
#include "stdio.h"
#include "alloc.h"
#include "bios.h"
#include "conio.h"
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
typedef int Status;
#define Init_Size 100
#define INCR 20
typedef int ElemType;
typedef struct
{ElemType *Elem;
int Top;
int StackSize;
}SqStack;
Status InitStack(SqStack &S)
{ S.Elem=(ElemType *)malloc(Init_Size*sizeof(ElemType));
if(!S.Elem) return OVERFLOW;
S.Top=0;
return OK;
}
Status GetTop(SqStack S, ElemType &e)
{if (S.Top==0) return ERROR;
e=S.Elem[S.Top-1];
return OK;
}
Status Push(SqStack &S, ElemType e) /*入栈*/
{ if(S.Top==S.StackSize)
{ S.Elem=(ElemType*)malloc((S.StackSize+INCR)*sizeof(ElemType));
if(!S.Elem) return(OVERFLOW);
S.StackSize+=INCR;
}
S.Elem[S.Top++]=e;
return OK;
}
Status Pop(SqStack &S,ElemType &e) /*出栈*/
{if (!S.Top)
{printf("stack is empty when poping\n");return(ERROR);}
e=S.Elem[--S.Top];
return OK;
}
void StackOutput(SqStack S) /*遍历栈并且输出*/
{ int i;
for(i=0;i<S.Top;i++)
printf("%d ",S.Elem[i]);
printf("\n");
}
int StackLength(SqStack S) /*求栈长度*/
{return S.Top;}
Status StackEmpty(SqStack S) /*栈的判空*/
{if (S.Top) return FALSE;
else return TRUE;}
Status DestroyStack(SqStack S) /*销毁栈*/
{free(S.Elem);
return OK;}
void ClearStack(SqStack &S) /*清空栈*/
{S.Top=NULL;}
main()
{ SqStack S;
ElemType e;
int i;
clrscr();
InitStack(S);
for(i=1;i<=5;i++) Push(S,2*i+1);
if (!StackEmpty(S)) printf("\nNot Empty with Stack");
printf("\nStack Length=%d\n",StackLength(S));
StackOutput(S);
Pop(S, e); StackOutput(S);
Push(S,111); StackOutput(S);
Push(S,222); StackOutput(S);
Pop(S, e); StackOutput(S);
ClearStack(S);
if (StackEmpty(S)) printf ("Empty with the Stack");
DestroyStack(S);
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -