代码实现
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>#define ElemType int
typedef struct LNode {ElemType data;struct LNode *next;
} LNode, *LinkStack;
void InitStack(LinkStack *stack){*stack = NULL;
}
bool StackEmpty(LinkStack stack){if(stack == NULL)return true;return false;
}
bool Push(LinkStack *stack,ElemType e){LinkStack new = (LinkStack)malloc(sizeof(LNode));if(new==NULL)return false;new->data = e;new->next = *stack;*stack = new;return true;
}
bool Pop(LinkStack *stack,ElemType *e){if(StackEmpty(*stack))return false;*e = (*stack)->data;LinkStack old = *stack;*stack = (*stack)->next;free(old);return true;
}
bool GetTop(LinkStack stack,ElemType *e){if(StackEmpty(stack))return false;*e = stack->data;return true;
}
void DestroyStack(LinkStack *stack){while(*stack!=NULL){LNode *new = *stack;*stack = (*stack)->next;free(new);}
}int main(){LinkStack stack;ElemType Elem;InitStack(&stack);Push(&stack,1);Push(&stack,2);Push(&stack,3);GetTop(stack,&Elem);printf("当前栈顶元素为%d\n",Elem);printf("出栈元素为:");Pop(&stack,&Elem);printf("%d ",Elem);Pop(&stack,&Elem);printf("%d ",Elem);Pop(&stack,&Elem);printf("%d\n",Elem);DestroyStack(&stack);return 0;
}