栈的链式存储及其基本运算
#include <stdio.h> #include <stdlib.h> #define M 10 typedef struct stnode { char data; struct stnode *next; }LinkStack; void InitStack(LinkStack *&ls) //初始化栈 { ls=NULL; } void PushStack(LinkStack *&ls,char x)//进栈 { LinkStack *p; p=(LinkStack *)malloc(sizeof(LinkStack)); p->data=x; p->next=ls; ls=p; } int PopStack(LinkStack *&ls,char &x)//出栈 { LinkStack *p; if(ls==NULL) return 0; else { p=ls; x=p->data; ls=p->next; free(p); return 1; } } int GetTop(LinkStack *ls,char &x)//取栈顶元素 { if(ls==NULL) return 0; else { x=ls->data; return 1; } } int StackEmpty(LinkStack *ls)//判断栈空 { if(ls==NULL) return 1; else return 0; } int main() { LinkStack *ls; char e; InitStack(ls); printf("栈%s\n",(StackEmpty(ls)==1?"空":"不空")); printf("a,b,c,d进栈\n"); PushStack(ls,'a'); PushStack(ls,'b'); PushStack(ls,'c'); PushStack(ls,'d'); PushStack(ls,'f'); /* int i; for(i=0;i<5;i++) { scanf("%c",&e); PushStack(ls,e); } */ printf("栈%s\n",(StackEmpty(ls)==1?"空":"不空")); GetTop(ls,e); printf("栈顶元素:%c\n",e); printf("出栈次序:\n"); while(!StackEmpty(ls)) { PopStack(ls,e); printf("%c ",e); } printf("\n"); return 0; }不知为毛注释掉的那一行不行
请dalao不吝赐教。