1、堆栈和队列基本函数一.顺序栈1.宏定义#include#include#define MAXSIZE *#define datatype *2.结构体typedef struct datatype dataMAXSIZE; int top;Seqstack;3.基本函数Seqstack *Init_Seqstack()/*置空栈函数(初始化)1.先决条件:无;2.函数作用:首先建立栈空间,然后初始化栈顶指针,返回栈s的地址*/ Seqstack *s; s=(Seqstack *)malloc(sizeof(Seqstack); s-top=-1; return s;int Empty_Seq
2、stack(Seqstack *s)/*判栈空函数1.先决条件:初始化顺序栈;2.函数作用:判断栈是否为空,空返回1,不空返回0*/ if(s-top=-1) return 1; else return 0;int Push_Seqstack(Seqstack *s,datatype x)/*入栈函数1.先决条件:初始化顺序栈2.函数作用:将数据x入栈,栈满则不能,成功返回1,因栈满失败返回0*/ if(s-top=MAXSIZE-1) return 0; s-top=s-top+1; s-datas-top=x; return 1;int Pop_Seqstack(Seqstack *s,d
3、atatype *x)/*出栈函数1.先决条件:初始化顺序栈2.函数作用:从栈中出一个数据,并将其存放到x中,成功返回1,因栈空失败返回0*/ if(s-top=-1) return 0; *x=s-datas-top; s-top-; return 1;int Top_Seqstack(Seqstack *s,datatype *x)/*取栈顶元素函数1.先决条件:初始化顺序栈2.函数作用:取栈顶元素,并把其存放到x中,成功返回1,因栈空失败返回0*/ if(s-top=-1) return 0; *x=s-datas-top; return 1;int Printf_Seqstack(Se
4、qstack *s)/*遍历顺序栈函数1.先决条件:初始化顺序栈2.函数作用:遍历顺序栈,成功返回1*/ int i,j=0; for(i=s-top;i=0;i-) printf(%d ,s-datai);/*因datatype不同而不同*/ j+; if(j%10=0) printf(n); printf(n); return 1;int Conversation_Seqstack(int N,int r)/*数制转换函数(顺序栈)1.先决条件:具有置空栈,入栈,出栈函数2.函数作用:将N转换为r进制的数*/ Seqstack *s; datatype x; printf(%d转为%d进制
5、的数为:,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); else printf(%d,x); free(s);/*释放顺序栈*/ printf(n); return 1;4.主函数int main() Seqstack *s; int choice; datatype x; do printf(*n); printf(1.置空栈 2.判栈空 3.入栈 4.
6、出栈 5.取栈顶元素 6.遍历 7.退出n); printf(*n); printf(请输入选择(17):); scanf(%d,&choice); getchar(); switch(choice) case 1:s=Init_Seqstack(); if(s) printf(置空栈成功!n);break; case 2:if(Empty_Seqstack(s) printf(此为空栈.n); else printf(此不为空栈.n);break; case 3:printf(请输入一个整数:); scanf(%d,&x); if(Push_Seqstack(s,x) printf(入栈成功
7、.n); else printf(栈已满,无法入栈.n);break; case 4:if(Pop_Seqstack(s,&x) printf(出栈成功,出栈元素为:%dn,x); else printf(出栈失败,因栈为空.n);break; case 5:if(Top_Seqstack(s,&x) printf(取栈顶元素成功,栈顶元素为:%dn,x); else printf(取栈顶元素失败,因栈为空.n); break; case 6:Printf_Seqstack(s);break; case 7:printf(谢谢使用!n);break; default :printf(输入错误,
8、请重新输入!n);break; while(choice!=7); return 0;二.链栈1.宏定义#include#include#define datatype *2.结构体typedef struct snode datatype data; struct snode *next;Stacknode,*Linkstack;3.基本函数Linkstack Init_Linkstack()/*初始化栈函数1.先决条件:无2.函数作用:初始化链栈,返回top地址*/ Linkstack top; top=(Linkstack)malloc(sizeof(Stacknode); top-ne
9、xt=NULL; return top;int Empty_Linkstack(Linkstack top)/*判栈空函数1.先决条件:初始化链栈2.函数作用:判断栈是否为空,空返回1,不空返回0*/ if(top-next=NULL) return 1; else return 0;int Push_Linkstack(Linkstack top,datatype x)/*入栈函数1.先决条件:初始化链栈2.函数作用:将数据x入栈,成功返回1,失败返回0*/ Stacknode *p; p=(Stacknode *)malloc(sizeof(Stacknode); p-data=x; p-
10、next=top-next; top-next=p; return 1;int Pop_Linkstack(Linkstack top,datatype *x)/*出栈函数1.先决条件:初始化链栈2.函数作用:若栈空退出,若没空则将数据出栈,并将其存放到x中,成功返回1,因栈空失败返回0*/ if(top-next=NULL) return 0; Stacknode *p=top-next; *x=p-data; top-next=p-next; free(p); return 1;int Top_Linkstack(Linkstack top,datatype *x)/*取栈顶元素函数1.先
11、决条件:初始化链栈2.函数作用:取栈顶元素并放到x中,成功返回1,因栈空失败返回0*/ if(top-next=NULL) return 0; *x=top-next-data; return 1;int Printf_Linkstack(Linkstack top)/*遍历链栈函数1.先决条件:初始化链栈2.函数作用:遍历链栈,成功返回1*/ Stacknode *p=top-next; int j=0; while(p) printf(%d ,p-data);/*因datatype不同而不同*/ j+; if(j%10=0) printf(n); p=p-next; printf(n);
12、return 1;int Conversation_Linkstack(int N,int r)/*数制转换函数(链栈)1.先决条件:具有置空栈,入栈,出栈函数2.函数作用:将N转换为r进制的数*/ Linkstack top; datatype x; 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);
13、else printf(%d,x); printf(n); free(top);/*释放栈顶空间*/ return 1;4.主函数int main() Linkstack top; int choice; datatype x; do printf(*n); printf(1.置空栈 2.判栈空 3.入栈 4.出栈 5.取栈顶元素 6.遍历 7.退出n); printf(*n); printf(请输入选择(17):); scanf(%d,&choice); getchar(); switch(choice) case 1:top=Init_Linkstack(); if(top) printf
14、(置空栈成功!n);break; case 2:if(Empty_Linkstack(top) printf(此为空栈.n); else printf(此不为空栈.n);break; case 3:printf(请输入一个整数:); scanf(%d,&x); if(Push_Linkstack(top,x) printf(入栈成功.n); else printf(栈已满,无法入栈.n);break; case 4:if(Pop_Linkstack(top,&x) printf(出栈成功,出栈元素为:%dn,x); else printf(出栈失败,因栈为空.n);break; case 5:
15、if(Top_Linkstack(top,&x) printf(取栈顶元素成功,栈顶元素为:%dn,x); else printf(取栈顶元素失败,因栈为空.n); break; case 6:Printf_Linkstack(top);break; case 7:printf(谢谢使用!n);break; default :printf(输入错误,请重新输入!n);break; while(choice!=7); return 0;三.顺序队列1.宏定义#include#include#define MAXSIZE *#define datatype *2.结构体typedef struct
16、 datatype dataMAXSIZE; int rear,front; int num;Sequeue;3.基本函数Sequeue *Init_Sequeue()/*初始化顺序队列函数1.先决条件:无2.函数作用:初始化顺序队列,成功返回顺序队列首地址q*/ Sequeue *q; q=(Sequeue *)malloc(sizeof(Sequeue); q-front=q-rear=MAXSIZE-1; q-num=0; return q;int In_Sequeue(Sequeue *q,datatype x)/*入队函数1.先决条件:初始化顺序队列2.函数作用:将数据x入队到q中,
17、成功返回1,因队满失败返回0*/ if(q-num=MAXSIZE) printf(队满.n);/*可视情况删除此句*/ return 0; else q-rear=(q-rear+1)%MAXSIZE; q-dataq-rear=x; q-num+; return 1; int Front_Sequeue(Sequeue *q,datatype *x)/*取队头元素函数1.先决条件:初始化顺序表2.函数作用:取队头元素并将其存放到x中,成功返回1,因队空而失败返回0*/ if(q-num=0) printf(队空.n);/*可视情况删除此句*/ return 0; *x=q-dataq-fr
18、ont+1; return 1;int Out_Sequeue(Sequeue *q,datatype *x)/*出队函数1.先决条件:初始化顺序队列2.函数作用:将数据x入队到q中,成功返回1,因队空失败返回0*/ if(q-num=0) printf(队空.n);/*可视情况删除此句*/ return 0; else q-front=(q-front+1)%MAXSIZE; *x=q-dataq-front; q-num-; return 1; int Empty_Sequeue(Sequeue *q)/*判空函数1.先决条件:初始化顺序队列2.函数作用:是空返回1,非空返回0*/ if(
19、q-num=0) return 1; else return 0;int Printf_Sequeue(Sequeue *q)/*遍历函数1.先决条件:初始化顺序队列2.函数作用:遍历输出所有数据*/ int i,j=q-front+1,n=q-num; for(i=0;idataj);/*因datatype数据不同而不同*/ j+; j=j%MAXSIZE; printf(n); return 1;4.主函数int main() Sequeue *q; int choice; datatype x; do printf(*n); printf(1.初始化 2.判队空 3.入队 4.出队 5.
20、取队头元 6.遍历 7.退出n); printf(*n); printf(请输入选择(17):); scanf(%d,&choice); getchar(); switch(choice) case 1:q=Init_Sequeue(); if(q) printf(置空队成功!n);break; case 2:if(Empty_Sequeue(q) printf(此为空队.n); else printf(此不为空队.n);break; case 3:printf(请输入一个整数:); scanf(%d,&x); if(In_Sequeue(q,x) printf(入队成功.n); else p
21、rintf(队已满,无法入队.n);break; case 4:if(Out_Sequeue(q,&x) printf(出队成功,出队元素为:%dn,x); else printf(出队失败,因队为空.n);break; case 5:if(Front_Sequeue(q,&x) printf(取队头元素成功,队头元素为:%dn,x); else printf(取队头元素失败,因队为空.n); break; case 6:Printf_Sequeue(q);break; case 7:printf(谢谢使用!n);break; default :printf(输入错误,请重新输入!n);bre
22、ak; while(choice!=7); return 0;四.链队列1.宏定义#include#include#define datatype int2.结构体typedef struct node datatype data; struct node *next;Qnode;typedef struct Qnode *front,*rear;Lqueue;3.基本函数Lqueue *Init_Lqueue()/*初始化链队列函数1.先决条件:无2.函数作用:初始化链队列,成功返回顺序队列首地址q(头结点)*/ Lqueue *q; Qnode *p; q=(Lqueue *)malloc
23、(sizeof(Lqueue); p=(Qnode *)malloc(sizeof(Qnode); p-next=NULL; q-front=p; q-rear=p; return q;int In_Lqueue(Lqueue *q,datatype x)/*入队函数1.先决条件:初始化链队列2.函数作用:将数据x入队到q中,成功返回1*/ Qnode *p; p=(Qnode *)malloc(sizeof(Qnode); p-data=x; p-next=NULL; q-rear-next=p; q-rear=p; return 1;int Empty_Lqueue(Lqueue *q)/
24、*判空函数1.先决条件:初始化链队列2.函数作用:是空返回1,非空返回0*/ if(q-front=q-rear) return 1; else return 0;int Front_Lqueue(Lqueue *q,datatype *x)/*取队头元素函数1.先决条件:初始化链队列2.函数作用:取队头元素并将其存放到x中,成功返回1,因队空而失败返回0*/ if(Empty_Lqueue(q) printf(队空.n);/*可视情况删除此句*/ return 0; *x=q-front-next-data; return 1;int Out_Lqueue(Lqueue *q,datatyp
25、e *x)/*出队函数1.先决条件:初始化链队列2.函数作用:将数据x入队到q中,成功返回1,因队空失败返回0*/ Qnode *p; if(Empty_Lqueue(q) printf(队空.n);/*可视情况删除此句*/ return 0; p=q-front-next; *x=p-data; q-front-next=p-next; free(p); if(q-front-next=NULL) q-rear=q-front; return 1;int Printf_Lqueue(Lqueue *q)/*遍历函数1.先决条件:初始化链队列2.函数作用:遍历输出所有数据*/ Qnode *p; for(p=q-front-next;p!=NULL;p=p-next) printf(%d ,p-data);/*因datatype数据不同而不同*/ printf(n); return 1;4.主函数int main() Lqueue *q; int choice; datatype x; do printf(*n); printf(1.初始化 2.判队空 3.入队 4.出队 5.取队头元 6.遍
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1