1、C 语言实现 栈的各种操作,调试运行成功有截图。后附代码。代码: #include #include#include#define INIT_SIZE 5 /初始大小 #define INCREASE_SIZE 5 /每次增加大小typedef struct int *top;int *base;int stacksize;sqstack; /这是一个栈的结构体int Creat_stack(sqstack*s);int Gettop_stack(sqstack*s,int *e);int Pop_stack(sqstack*s,int*e);int Push_stack(sqstack*s,
2、int e);int Destroy_stack(sqstack*s);int Getsize_stack(sqstack*s);void main() int m,e,n,f,i,f1,k=0;int a1,a2,a3,a4,a5,a6,a7;/是用来接函数的返回值的int *e1,*e2,*e3;sqstack ss;ss.base =ss.top =NULL;/初始化e1=e2=e3= /指针声明时最好初始化一下,若果没有初始化,直接*e1,是错误的printf(“-顺序栈的基本操作 -n“); printf(“-1.创建一个空栈-n“); printf(“-2.销毁栈-n“); pri
3、ntf(“-3.单个入栈-n“); printf(“-4.单次出栈-n“); printf(“-5.查询栈顶元素-n“);printf(“-6.多数入栈-n“); printf(“-7.集体出栈-n“); printf(“-8.查询栈容量-n“);printf(“-9.退出-n“);loop:printf(“请选择:n“);scanf(“%d“,switch(m) case 1: a1=Creat_stack(if(a1=0) printf(“栈已经存在,请先销毁原栈!n“);break;printf(“OK!已经成功建立一个空栈!n“);break;case 2: a5=Destroy_st
4、ack(if(a5=0) printf(“栈不存在!n“);break;else printf(“OK!销毁成功!n“);break;case 3: printf(“请输入你要入栈的元素(整型):n“);scanf(“%d“,a2=Push_stack(if(a2=0)printf(“栈不存在,请先创建栈!n“);break;printf(“OK!入栈成功!n“);break;case 4: a3=Pop_stack(if(a3=-1) printf(“栈不存在,请先创建栈!n“);break;else if(a3=0)printf(“栈为空!n“);break;else printf(“OK
5、!出栈成功!出栈元素为:“);printf(“%d“,*e1);break;case 5: a4=Gettop_stack(if(a4=-1)printf(“栈不存在,请先创建栈!n“);break;else if(a4=0) printf(“栈为空!n“);break;else printf(“OK!查询栈顶元素为:“);printf(“%dn“,*e2);break;case 6: printf(“请输入您要入栈的个数:n“);scanf(“%d“,for(i=0;ibase !=s-top ) return 0;s-base=(int*)malloc(INIT_SIZE*sizeof(i
6、nt);/ base 本来是指向 int 型的指针,若把后面一长串内存强制为 int 则划分为一小块一小块/base+ 也变为指向下一个 int 型s-top =s-base;s-stacksize=INIT_SIZE;return 1;int Gettop_stack(sqstack*s,int*e) if(s-base=NULL)return -1;else if(s-base=s-top) return 0;else *e=*(s-top-1);/ 这个 top 指针没有改变return 1;int Push_stack(sqstack*s,int e) if(s-base =NULL)
7、return 0;/栈不存在if(s-top-s-base)=s-stacksize ) s-base=(int*)realloc(s-base,(s-stacksize+INCREASE_SIZE)*sizeof(int);/realloc 增加一段内存s-stacksize+=INCREASE_SIZE ;s-top =s-base+s-stacksize;/确保 top 指向栈顶,之前 top 超了范围,*(s-top)=e;s-top +;return 1;int Pop_stack(sqstack*s,int*e) if(s-base=NULL)return -1;else if(s-top=s-base)return 0;elses-top-;*e=*(s-top);/要先降低 top,再返回,top 已经改变return 1;int Destroy_stack(sqstack*s) if(s-base =NULL)return 0;/栈不存在free(s-base);s-top=s-base=NULL;return 1;int Getsize_stack(sqstack*s) if(s-base =NULL)return 0;/栈不存在else return s-stacksize;