栈结果
#include "stdio.h" #include "stdlib.h" #include "math.h" #include "time.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 20 /* 存储空间初始分配量 */ typedef int Status; typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int */ /* 顺序栈结构 */ typedef struct { //下标为0的地方为栈底,top指针指向栈顶部 SElemType data[MAXSIZE]; int top; }SqStack; Status visit(SElemType c) { printf("%d ",c); return OK; } /* 构造一个空栈S */ Status InitStack(SqStack *s) { s->top=-1; return OK; } /* 把S置为空栈 */ Status ClearStack(SqStack *s) { s->top=-1; return OK; } /* 若栈S为空栈,则返回TRUE,否则返回FALSE */ Status StackEmpty(SqStack s) { if(s.top==-1){ return TRUE; }else{ return FALSE; } } /* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */ Status GetTop(SqStack s,SElemType *e) { if(s.top<0){ return ERROR; } if(s.top>=MAXSIZE-1){ return ERROR; } *e=s.data[s.top]; return OK; } /* 插入元素e为新的栈顶元素 */ Status Push(SqStack *s,SElemType e) { if(s->top>=MAXSIZE-1){ return ERROR; } else{ s->data[++s->top]=e; } return OK; } /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */ Status Pop(SqStack *s,SElemType *e) { if(s->top<=0){ return ERROR; } *e=s->data[s->top]; s->top--; return OK; return OK; } /* 从栈底到栈顶依次对栈中每个元素显示 */ Status StackTraverse(SqStack s) { if(s.top<=0){ return ERROR; } int i; for(i=0;i<=s.top;i++){ visit(s.data[i]); } printf("\n"); return OK; } int StackLength(SqStack s){ return ++s.top; } int main() { int j; SqStack s; int e; if(InitStack(&s)==OK) for(j=1;j<=10;j++) Push(&s,j); printf("栈中元素依次为:"); StackTraverse(s); Pop(&s,&e); printf("弹出的栈顶元素 e=%d\n",e); printf("栈空否:%d(1:空 0:否)\n",StackEmpty(s)); GetTop(s,&e); printf("栈顶元素 e=%d 栈的长度为%d\n",e,StackLength(s)); ClearStack(&s); printf("清空栈后,栈空否:%d(1:空 0:否)\n",StackEmpty(s)); return 0; }
一点总结:
1)下标为0的数组元素为栈底
2)top指针时刻指向栈顶元素
3)初始化的时候,top指针为-1
原文:http://www.cnblogs.com/bobodeboke/p/3581231.html