大家好,欢迎来到IT知识分享网。
栈源代码(C语言版)
/实现了Pop,Push,Empty,Print,conversion等功能*/
#include<stdio.h> #include<stdlib.h> #define stack_init_size 10 #define STACKINCREMENT 10 //定义栈结构 typedef struct{ int * base; int * top; int stacksize; }SqStack; //初始化栈 void InitStack(SqStack * s){ s->base=(int *)malloc(stack_init_size*sizeof(int)); if(!s->base) exit(0); s->top=s->base; s->stacksize=stack_init_size; } //压栈 void Push(SqStack * s,int e){ if(s->top-s->base==s->stacksize){ s->base=(int *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(int)); if(!s->base) exit(0); s->top=s->base+s->stacksize; s->stacksize+=STACKINCREMENT; } *s->top=e; s->top++; } //弹栈 int Pop(SqStack * s){ int e; if(s->top==s->base) {printf("栈已空!\n"); exit(0); } s->top--; e=*s->top; return e; } //判断是否为空 int EmptyStack(SqStack s){ if(s.top==s.base) return 1; else return 0; } //置空栈 后面没用上。。。 void ClearStack(SqStack * s){ s->top=s->base; } //打印栈 void PrintStack(SqStack s){ while(!EmptyStack(s)){ s.top--; printf("%d ",*s.top); } printf("\n\n"); } //进制转换函数 void conversion(int N,int d){ SqStack M; InitStack(&M); printf("你输入的数值%d转换成%d进制后为:",N,d); while(N){ Push(&M,N%d); N=N/d; } while(!EmptyStack(M)){ PrintStack(M); break; } printf("\n"); } //主函数 int main(){ SqStack M; int x,y,z,i,j; InitStack(&M); printf("——栈已初始化完成——\n\n\n"); printf("请输入要操作的序号:\n"); printf("1·入栈 2·出栈 3·进制转换 4·退出\n"); scanf("%d",&x); while(x!=0){ switch(x){ case 1:printf("请输入要入栈的数值:\n"); scanf("%d",&y); Push(&M,y); PrintStack(M); break; case 2:printf("出栈的数值为:"); z=Pop(&M); printf("%d\n",z); PrintStack(M); break; case 3:printf("请输入要转换的数值和进制:\n"); scanf("%d%d",&i,&j); conversion(i,j); break; case 4:exit(0); break; default:printf("输入有误,请重新输入:\n"); } printf("1·入栈 2·出栈 3·进制转换 4·退出\n"); scanf("%d",&x); } return 0; }
程序运行截图
2016_11_21
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/149618.html