- #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");
- }