栈--链式存储
代码内容来自《大话数据结构》
#include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status; typedef int SElemType; struct StackNode{ SElemType data; struct StackNode * next; }; typedef struct StackNode * LinkStackPtr; struct LinkStack{ LinkStackPtr top; int count; }; Status visit(SElemType c){ printf("%d ",c); return OK; } Status InitStack(LinkStack *S){ S->top = (LinkStackPtr)malloc(sizeof(struct StackNode)); if( ! S->top ){ return ERROR; } S->top = NULL; S->count = 0; return OK; } Status ClearStack(LinkStack *S){ LinkStackPtr p,q; p = S->top; while(p){ q = p; p = p->next; free(q); } S->count = 0; return OK; } Status StackEmpty(LinkStack S){ if(S.count){ return FALSE; } return TRUE; } int StackLength(LinkStack S){ return S.count; } Status GetTop(LinkStack S,SElemType *e){ if(S.top){ *e = (S.top)->data; return OK; } return ERROR; } Status Push(LinkStack *S,SElemType e){ LinkStackPtr p = (LinkStackPtr)malloc(sizeof(struct StackNode)); p->data = e; p->next = S->top; S->top = p; S->count ++; return OK; } Status Pop(LinkStack *S,SElemType *e){ if( ! S->top){ return ERROR; } *e = S->top->data; LinkStackPtr p = S->top; S->top = S->top->next; S->count--; free(p); return OK; } Status StackTraverse(LinkStack S){ LinkStackPtr p = S.top; while(p){ visit(p->data); p = p->next; } printf("\n"); return OK; } int main(){ int j; Status i; SElemType e; LinkStack S; i = InitStack(&S); if( i){ printf("初始化成功\n"); } else { printf("初始化失败\n"); } printf("栈是否为空 %d\n",StackEmpty(S)); for(j=1;j<=10;j++){ Push(&S,j*2); } StackTraverse(S); Pop(&S,&e); printf("弹出的元素为%d\n",e); StackTraverse(S); i = GetTop(S,&e); printf("此时的栈顶元素是%d \n",e); printf("栈长度为%d\n",StackLength(S)); printf("栈是否为空 %d\n",StackEmpty(S)); ClearStack(&S); printf("栈是否为空 %d\n",StackEmpty(S)); }
如需转载,请注明文章出处,谢谢!!!