算法与数据结构之栈的操作----链栈
2013-04-21 00:00
155 查看
//链栈 #include<stdio.h> #include<stdlib.h> typedef struct SNode { int data; struct SNode *next; }SNode,*LinkStack; LinkStack top; LinkStack PushStack(LinkStack top,int x) //入栈 { LinkStack s; s=(LinkStack)malloc(sizeof(SNode)); s->data=x; s->next=top; top=s; return top; } LinkStack PopStack(LinkStack top) //退栈 { LinkStack p; if(top!=NULL) { p=top; top=top->next; free(p); printf("退栈已完成\n"); return top; } else printf("栈是空的,无法退栈!\n"); return 0; } int GetStackTop(LinkStack top) //取栈顶元素 { return top->data; } bool IsEmpty()//bool取值false和true,是0和1的区别,bool只有一个字节,BOOL为int型,bool为布尔型 { return top==NULL ? true:false; } void Print() { SNode *p; p=top; if(IsEmpty()) { printf("The stack is empty!\n"); return; } while(p) { printf("%d ", p->data); p=p->next; } printf("\n"); } void main() { int x,a,b; char m; do { printf("\n"); printf("###############链栈的基本操作##################\n"); printf("××××××××1.置空栈××××××××××\n"); printf("××××××××2.进栈×××××××××××\n"); printf("××××××××3.退栈×××××××××××\n"); printf("××××××××4.取栈顶元素××××××××\n"); printf("××××××××5.退出程序×××××××××\n"); printf("##############################################\n"); printf("\n请选择一个字符:"); scanf("%c",&m); switch(m){ case '1': top=NULL; printf("\n栈已置空!"); break; case '2': printf("\n请输入要进栈的元素个数是:"); scanf("%d",&a); printf("\n请输入要进栈的%d个元素:",a); for(b=0;b<a;b++) { scanf("%d",&x); top=PushStack(top,x); } printf("进栈已完成!\n"); printf("\n输出栈为:"); Print(); break; case '3': printf("\n操作之前的输出栈为:"); Print(); top=PopStack(top); printf("\n操作过后的输出栈为:"); Print(); break; case '4': printf("\n输出栈为:"); Print(); if(top!=NULL) printf("\n栈顶元素是:%d\n",GetStackTop(top)); else printf("\n栈是空的,没有元素!"); break; case '5':break; default: printf("\n输入的字符不对,请重新输入!"); break; } getchar(); }while(m!='5'); }