1、include
2、emType ElemType;
#include "tou.h"
#include
3、se的值为NULL SElemType *top; // 栈顶指针 int stacksize; // 当前已分配的存储空间,以元素为单位 }SqStack; // 顺序栈 // 构造一个空栈S。 int InitStack(SqStack *S) { // 为栈底分配一个指定大小的存储空间 (*S).base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if( !(*S).base ) e
4、xit(OVERFLOW); // 存储分配失败 (*S).top = (*S).base; // 栈底与栈顶相同表示一个空栈 (*S).stacksize = STACK_INIT_SIZE; return 1; } // 若栈S为空栈(栈顶与栈底相同的),则返回1,否则返回0。 int StackEmpty(SqStack S) { if(S.top == S.base) return 1; else return 0; } // 插入元素e为新的栈顶元素。
5、 int Push(SqStack *S, SElemType e) { if((*S).top - (*S).base >= (*S).stacksize) // 栈满,追加存储空间 { (*S).base = (SElemType *)realloc((*S).base, ((*S).stacksize + STACKINCREMENT) * sizeof(SElemType)); if( !(*S).base ) exit(0); // 存储分配失败
6、 (*S).top = (*S).base+(*S).stacksize; (*S).stacksize += STACKINCREMENT; } *((*S).top)++=e; // 这个等式的++ * 优先级相同,但是它们的运算方式,是自右向左 return 1; } // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回1;否则返回0。 int Pop(SqStack *S,SElemType *e) { if((*S).top == (*S).base) return 0;
7、 *e = *--(*S).top; // 这个等式的++ * 优先级相同,但是它们的运算方式,是自右向左 return 1; } // 销毁栈S,S不再存在。 int DestroyStack(SqStack *S) { free((*S).base); //释放栈底的空间,并置空 (*S).base = NULL; (*S).top = NULL; (*S).stacksize = 0; return 1; } // 把S置为空栈。 int ClearStack(SqStac
8、k *S) { (*S).top = (*S).base; //栈底栈顶相同为空栈 return 1; } // 返回S的元素个数,即栈的长度。 int StackLength(SqStack S) { // 栈顶指针减去栈底指针刚好等于长度,因为栈顶指针指向当前栈 // 顶元素的下一个位置。 return S.top - S.base; } // 若栈不空,则用e返回S的栈顶元素,并返回1;否则返回0。 int GetTop(SqStack S,SElemType *e) { if(S
9、top > S.base) { *e = *(S.top-1); // 栈顶指针的下一个位置为栈顶元素 return 1; } else return 0; } // 从栈底到栈顶依次对栈中每个元素调用函数visit()。 int StackTraverse(SqStack S,int(*visit)(SElemType)) { while(S.top>S.base) visit(*S.base++); printf("\n");
10、 return 1; } int visit(SElemType c) { printf("%d ",c); return 1; } #include "toutou.h" int main() { int j,n,num; SqStack s; SElemType e; // 创建一个顺序栈。 if(InitStack(&s) == 1) printf("顺序栈创建成功!\n"); // 查看栈的长度。 printf("栈的长度是%
11、d\n", StackLength(s)); // 查看栈是否为空。 printf("栈空否:%d(1:空 0:否)\n",StackEmpty(s)); // 初始化栈。 printf("输入数据个数 :"); scanf("%d",&n); printf("输入数据 :"); for(j = 1; j <= n; j++){scanf("%d",&num); Push(&s, num);} printf("栈中元素依次为:"); StackTraverse(s,visit); Pop(&s,&e); printf("弹出的栈顶元素 e=%d\n",e); GetTop(s,&e); printf("栈顶元素 e=%d 栈的长度为%d\n",e,StackLength(s)); ClearStack(&s); printf("清空栈后,栈空否:%d(1:空 0:否)\n",StackEmpty(s)); DestroyStack(&s); printf("销毁栈成功"); return 0; }






