【数据结构】链式栈的操作

来源:互联网 发布:高新区行知小学怎么样 编辑:程序博客网 时间:2024/05/29 14:22
#include <stdio.h>#include <malloc.h>typedef int ElemType;typedef struct LinkStack{LinkStack *link;ElemType elem;}* PLinkStack;void InitStack(PLinkStack L);  PLinkStack Push(PLinkStack L,ElemType i);  PLinkStack Pop(PLinkStack L);  void DestroyStack(PLinkStack L);  bool StackEmpty(PLinkStack L);  ElemType GetTop(PLinkStack L);  void StackTraverse(PLinkStack L);  void main(){PLinkStack L;L = (PLinkStack)malloc(sizeof(LinkStack));InitStack(L);for (int i = 0; i < 5; i++){L = Push(L,i*2+1);}StackTraverse(L);L = Pop(L);StackTraverse(L);if (!StackEmpty(L))printf("%d\n",GetTop(L));DestroyStack(L);}void InitStack(PLinkStack L)  // 建立一个空的链式栈{L->link = NULL;}PLinkStack Push(PLinkStack L,ElemType i){PLinkStack P;P = (PLinkStack)malloc(sizeof(LinkStack));if (P == NULL){printf("内存分配失败\n");return NULL;}P->elem = i;P->link = L;L = P;return L;}PLinkStack Pop(PLinkStack L){PLinkStack P = L;L = L->link;free(P);return L;}void DestroyStack(PLinkStack L){if (L != NULL){L->link = NULL;free(L);}}bool StackEmpty(PLinkStack L){return (L==NULL && L->link == NULL);  // true 为空; false 不为空}ElemType GetTop(PLinkStack L){return L->elem;}void StackTraverse(PLinkStack L){PLinkStack P = L;while (P->link != NULL){printf("%d\t",P->elem);P = P->link;}printf("\n");}

0 0
原创粉丝点击