/* linkStack.c */ /* 链栈 */ #include <stdio.h> #include <stdlib.h> #include <stdbool.h> /* 链栈数据结构 */ /* ———————————————— | value | next | <--- top ———————————————— ↓ ———————————————— | value | next | ———————————————— ↓ ———————————————— | value | next | ———————————————— */ typedef struct node { int data; struct node *next; } StackNode; void interface(void); /* 链栈函数声明 */ StackNode *initializeLinkStack(); bool isEmptyLinkStack(StackNode*); StackNode *pushLinkStack(StackNode*, int); StackNode *popLinkStack(StackNode*); /* 程序主函数入口 */ int main(){ StackNode *top = initializeLinkStack(); int flag, num; interface(); for(;;){ printf("Command: "); scanf("%d", &num); switch(num){ case 0: puts("Bye!"); return 0; break; case 1: printf("Enter number: "); scanf("%d", &num); top = pushLinkStack(top, num); break; case 2: if(isEmptyLinkStack(top)) printf("Link stack is empty! "); else top = popLinkStack(top); break; } } return 0; } /* 用户界面 */ void interface(void){ puts("+******************************+"); puts("+ 0, quit 退出 +"); puts("+ 1, push 压入 +"); puts("+ 2, pop 弹出 +"); puts("+******************************+"); } /* 链栈函数实现 */ /* 初始化链栈 */ StackNode *initializeLinkStack(){ StackNode *top = (StackNode*)malloc(sizeof(StackNode)); top = NULL; return top; } /* 链栈是否为空 */ bool isEmptyLinkStack(StackNode* top){ if(top==NULL) return true; else return false; } /* 入栈 */ StackNode *pushLinkStack(StackNode *top, int number){ StackNode *s = (StackNode*)malloc(sizeof(StackNode)); s->data = number; s->next = top; top = s; return top; } /* 出栈 */ StackNode *popLinkStack(StackNode *top){ int i = top->data; StackNode *p = top; top = top->next; free(p); printf("Pop: %d ", i); return top; }