数据与结构-链栈
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 20 //链栈 typedef int Elemtype; typedef struct Stacknode { Elemtype data; struct Stacknode *next; int size;//栈的长度 } slStacktype; //初始化 void init(slStacktype *top) { top=malloc(sizeof(slStacktype)); top->next=NULL; top->size=0; } //入栈 int pushLstack(slStacktype *top,Elemtype x) { slStacktype *p; if((p=(slStacktype*)malloc(sizeof(slStacktype)))==NULL) return -1;//申请空间失败 p->data=x; p->next=top->next; top->next=p; top->size++; return 1;//成功 } //出栈 Elemtype popStack(slStacktype *top) { slStacktype *p; Elemtype x; if(top->next==NULL) return -1;//栈空,无法出栈 p=top->next; top->next=p->next; x=p->data; free(p); top->size--; return x; } //判断栈是否为空 int Empty_SeqStack(slStacktype *top) { if(top->next!=NULL) return 1; else return 0; } //取栈顶元素 Elemtype Top_SeqStack(slStacktype *top) { return top->data; } //求长度 int long_slStacktype(slStacktype *top) { return (top->size); } void output(slStacktype *top) { slStacktype *p; p=top->next; printf("遍历栈结果为:\n"); while(p->size) { printf("%3d",p->data); p=p->next; p->size--; } } int main() { slStacktype top1; int num9,num4; Elemtype num=10,num1,num2,num3; init(&top1); printf("0表示退出栈\n"); printf("1表示入栈\n"); printf("2表示出栈\n"); printf("3表示取栈顶元素\n"); printf("4表示判断栈是否为空\n"); printf("6表示销毁栈\n"); printf("7表示求栈的长度\n"); printf("8遍历栈\n"); printf("请输入你的指令!\n"); printf("go:\n"); while(num!=0) { scanf("%d",&num); switch(num) { case 0:num=0; break; case 1:printf("请输入入栈元素:\n"); scanf("%d\n",&num1); pushLstack(&top1,num1); break; case 2:num2=popStack(&top1); printf("出栈元素是:%d\n",num2); break; case 3:num3=Top_SeqStack(&top1); printf("栈顶元素是:%d\n",num3); break; case 4:num4=Empty_SeqStack(&top1); printf("判断结果为:%d\n",num4); printf("1表示非空,0表示空栈\n"); break; case 6:num=0; break; case 7:num9=long_slStacktype(&top1); printf("栈的长度是:%d\n",num9); break; case 8:output(&top1); break; default:printf("输入错误!"); break; } } }