把昨天提到的S.bottom简化之后又改了栈的链表。代码如下(已折叠):
#include<stdio.h> #include<stdlib.h> typedef struct _node{ int num; struct _node *next; }node; node *s; void build(node *&S) { s=(node *)malloc(sizeof(node)); s->next=NULL; } int sempty(node *&S) { if (s->next==NULL) return 1; else return 0; } int pop(node *&S) { if (sempty(S)) { printf("栈为空!\n"); } else { node *p; p=s; s=s->next; int k=p->num; free(p); return k; } } void init(node *&S) { while (!sempty(S)) { pop(S); } } void push(node *&S,int n) { node *p; p=(node *)malloc(sizeof(node)); p->num=n; p->next=s; s=p; } void showstack(node * S) { while (S->next!=NULL){ int k=S->num; S=S->next; printf("|%d|\n",k); } printf("| |\n"); printf(" - \n"); } int main() { build(s); int n; while (1) { printf("1:初始化栈;2:入栈;3:出栈;4:退出。\n"); int k; scanf("%d",&k); switch(k) { case 1:init(s); break; case 2:scanf("%d",&n); push(s,n); break; case 3:pop(s); break; case 4:return 0; } showstack(s); } return 0; }