您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > C语言堆栈和队列函数大全
一.顺序栈1.宏定义#includestdio.h#includestdlib.h#defineMAXSIZE****#definedatatype****2.结构体typedefstruct{datatypedata[MAXSIZE];inttop;}Seqstack;3.基本函数Seqstack*Init_Seqstack()/*置空栈函数(初始化)1.先决条件:无;2.函数作用:首先建立栈空间,然后初始化栈顶指针,返回栈s的地址*/{Seqstack*s;s=(Seqstack*)malloc(sizeof(Seqstack));s-top=-1;returns;}intEmpty_Seqstack(Seqstack*s)/*判栈空函数1.先决条件:初始化顺序栈;2.函数作用:判断栈是否为空,空返回1,不空返回0*/{if(s-top==-1)return1;elsereturn0;}intPush_Seqstack(Seqstack*s,datatypex)/*入栈函数1.先决条件:初始化顺序栈2.函数作用:将数据x入栈,栈满则不能,成功返回1,因栈满失败返回0*/{if(s-top==MAXSIZE-1)return0;s-top=s-top+1;s-data[s-top]=x;return1;}intPop_Seqstack(Seqstack*s,datatype*x)/*出栈函数1.先决条件:初始化顺序栈2.函数作用:从栈中出一个数据,并将其存放到x中,成功返回1,因栈空失败返回0*/{if(s-top==-1)return0;*x=s-data[s-top];s-top--;return1;}intTop_Seqstack(Seqstack*s,datatype*x)/*取栈顶元素函数1.先决条件:初始化顺序栈2.函数作用:取栈顶元素,并把其存放到x中,成功返回1,因栈空失败返回0*/{if(s-top==-1)return0;*x=s-data[s-top];return1;}intPrintf_Seqstack(Seqstack*s)/*遍历顺序栈函数1.先决条件:初始化顺序栈2.函数作用:遍历顺序栈,成功返回1*/{inti,j=0;for(i=s-top;i=0;i--){printf(%d,s-data[i]);/*因datatype不同而不同*/j++;if(j%10==0)printf(\n);}printf(\n);return1;}intConversation_Seqstack(intN,intr)/*数制转换函数(顺序栈)1.先决条件:具有置空栈,入栈,出栈函数2.函数作用:将N转换为r进制的数*/{Seqstack*s;datatypex;printf(%d转为%d进制的数为:,N,r);/*以后可以删除去*/s=Init_Seqstack();do{Push_Seqstack(s,N%r);N=N/r;}while(N);while(Pop_Seqstack(s,&x)){if(x=10)/*为了能转为十进制以上的*/printf(%c,x+55);elseprintf(%d,x);}free(s);/*释放顺序栈*/printf(\n);return1;}4.主函数intmain(){Seqstack*s;intchoice;datatypex;do{printf(****************************************************************\n);printf(1.置空栈2.判栈空3.入栈4.出栈5.取栈顶元素6.遍历7.退出\n);printf(****************************************************************\n);printf(请输入选择(1~7):);scanf(%d,&choice);getchar();switch(choice){case1:s=Init_Seqstack();if(s)printf(置空栈成功!\n);break;case2:if(Empty_Seqstack(s))printf(此为空栈.\n);elseprintf(此不为空栈.\n);;break;case3:printf(请输入一个整数:);scanf(%d,&x);if(Push_Seqstack(s,x))printf(入栈成功.\n);elseprintf(栈已满,无法入栈.\n);;break;case4:if(Pop_Seqstack(s,&x))printf(出栈成功,出栈元素为:%d\n,x);elseprintf(出栈失败,因栈为空.\n);break;case5:if(Top_Seqstack(s,&x))printf(取栈顶元素成功,栈顶元素为:%d\n,x);elseprintf(取栈顶元素失败,因栈为空.\n);break;case6:Printf_Seqstack(s);break;case7:printf(谢谢使用!\n);break;default:printf(输入错误,请重新输入!\n);break;}}while(choice!=7);return0;}二.链栈1.宏定义#includestdio.h#includestdlib.h#definedatatype****2.结构体typedefstructsnode{datatypedata;structsnode*next;}Stacknode,*Linkstack;3.基本函数LinkstackInit_Linkstack()/*初始化栈函数1.先决条件:无2.函数作用:初始化链栈,返回top地址*/{Linkstacktop;top=(Linkstack)malloc(sizeof(Stacknode));top-next=NULL;returntop;}intEmpty_Linkstack(Linkstacktop)/*判栈空函数1.先决条件:初始化链栈2.函数作用:判断栈是否为空,空返回1,不空返回0*/{if(top-next==NULL)return1;elsereturn0;}intPush_Linkstack(Linkstacktop,datatypex)/*入栈函数1.先决条件:初始化链栈2.函数作用:将数据x入栈,成功返回1,失败返回0*/{Stacknode*p;p=(Stacknode*)malloc(sizeof(Stacknode));p-data=x;p-next=top-next;top-next=p;return1;}intPop_Linkstack(Linkstacktop,datatype*x)/*出栈函数1.先决条件:初始化链栈2.函数作用:若栈空退出,若没空则将数据出栈,并将其存放到x中,成功返回1,因栈空失败返回0*/{if(top-next==NULL)return0;Stacknode*p=top-next;*x=p-data;top-next=p-next;free(p);return1;}intTop_Linkstack(Linkstacktop,datatype*x)/*取栈顶元素函数1.先决条件:初始化链栈2.函数作用:取栈顶元素并放到x中,成功返回1,因栈空失败返回0*/{if(top-next==NULL)return0;*x=top-next-data;return1;}intPrintf_Linkstack(Linkstacktop)/*遍历链栈函数1.先决条件:初始化链栈2.函数作用:遍历链栈,成功返回1*/{Stacknode*p=top-next;intj=0;while(p){printf(%d,p-data);/*因datatype不同而不同*/j++;if(j%10==0)printf(\n);p=p-next;}printf(\n);return1;}intConversation_Linkstack(intN,intr)/*数制转换函数(链栈)1.先决条件:具有置空栈,入栈,出栈函数2.函数作用:将N转换为r进制的数*/{Linkstacktop;datatypex;printf(%d转为%d进制的数为:,N,r);/*以后可以删除去*/top=Init_Linkstack();do{Push_Linkstack(top,N%r);N=N/r;}while(N);while(Pop_Linkstack(top,&x)){if(x=10)/*为了能转为十进制以上的*/printf(%c,x+55);elseprintf(%d,x);}printf(\n);free(top);/*释放栈顶空间*/return1;}4.主函数intmain(){Linkstacktop;intchoice;datatypex;do{printf(****************************************************************\n);printf(1.置空栈2.判栈空3.入栈4.出栈5.取栈顶元素6.遍历7.退出\n);printf(****************************************************************\n);printf(请输入选择(1~7):);scanf(%d,&choice);getchar();switch(choice){case1:top=Init_Linkstack();if(top)printf(置空栈成功!\n);break;case2:if(Empty_Linkstack(top))printf(此为空栈.\n);elseprintf(此不为空栈.\n);;break;case3:printf(请输入一个整数:);scanf(%d,&x);if(Push_Linkstack(top,x))printf(入栈成功.\n);elseprintf(栈已满,无法入栈.\n);;break;case4:if(Pop_Linkstack(top,&x))printf(出栈成功,出栈元素为:%d\n,x);elseprintf(出栈失败,因栈为空.\n);break;case5:if(Top_Linkstack(top,&x))printf(取栈顶元素成功,栈顶元素为:%d\n,x);elseprintf(取栈顶元素失败,因栈为空.\n);break;case6:Printf_Linkstack(top);break;case7:printf(谢谢使用!\n);break;default:printf(输入错误,请重新输入!\n);break;}}while(choice!=7);return0;}二.队列1.宏定义2.结构体3.基本函数4.主函数
本文标题:C语言堆栈和队列函数大全
链接地址:https://www.777doc.com/doc-4147157 .html