C语言栈和队列的基本操作

上传人:ji****72 文档编号:37539545 上传时间:2018-04-18 格式:DOC 页数:20 大小:1.09MB
返回 下载 相关 举报
C语言栈和队列的基本操作_第1页
第1页 / 共20页
C语言栈和队列的基本操作_第2页
第2页 / 共20页
C语言栈和队列的基本操作_第3页
第3页 / 共20页
C语言栈和队列的基本操作_第4页
第4页 / 共20页
C语言栈和队列的基本操作_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《C语言栈和队列的基本操作》由会员分享,可在线阅读,更多相关《C语言栈和队列的基本操作(20页珍藏版)》请在金锄头文库上搜索。

1、实验内容:实验内容: 1.编写函数 ,采用链式存储实现栈的初始化、入栈、出栈操作。2.编写函数 ,采用顺序存储实现栈的初始化、入栈、出栈操作。3.编写函数 ,采用链式存储实现队列的初始化、入队、出队操作。4.编写函数 ,采用顺序存储实现队列的初始化、入队、出队操作。5.编写一个主函数 ,在主函数中设计一个简单的菜单,分别调试上述算法。实验目的及要求:实验目的及要求:1.掌握栈、队列的思想及其存储实现2.掌握栈、队列的常见算法的程序实现实验结果:实验结果:#include #include #define MAXSIZE 80 typedef struct int data80; int top

2、; SeqStack; typedef struct lnode int data; struct lnode *next; StackNode,*LinkStack; typedef structint data80; int front,rear; int num; C_SeQueue; typedef struct node int data; struct node *next; QNode; typedef struct QNode *front,*rear; LQueue; void menu() printf(“n“);printf(“t* .栈的链式存储栈的链式存储 | .栈的

3、顺序存储栈的顺序存储 *n“);printf(“t* 1.初始化初始化 | 5.初始化初始化 *n“); printf(“t* 2.判空判空 | 6.判栈空判栈空 *n“); printf(“t* 3.入栈入栈 | 7.入栈入栈 *n“); printf(“t* 4.出栈出栈 | 8.出栈出栈 *n“); printf(“t* = *n“);printf(“t* .队列的链式存储队列的链式存储 | .队列的顺序存储队列的顺序存储 *n“);printf(“t* 9.初始化初始化 | 13.建有头结点队建有头结点队 *n“); printf(“t* 10.判空判空 | 14.判空判空 *n“);

4、 printf(“t* 11.入队入队 | 15.入队入队 *n“); printf(“t* 12.出队出队 | 16.出队出队 *n“); printf(“t* 0,退出退出 | *n“); printf(“t 请选择您所需操作的序号请选择您所需操作的序号:“); LinkStack Init_LinkStack() StackNode *L; L=(StackNode*)malloc(sizeof(StackNode); L-data=100; L-next=NULL; return L; int Empty_LinkStack(LinkStack top) if(top-next=NUL

5、L) return 1; else return 0; LinkStack Push_LinkStack(LinkStack top,int x) StackNode *s; s=(StackNode*)malloc(sizeof(StackNode); s-data=x; s-next=top-next; top-next=s;return top; LinkStack Pop_LinkStack(LinkStack top,int *s) StackNode *p; int j=0; p=top-next; if(p!=NULL) *s=p-data; top-next=p-next; f

6、ree(p); return top; SeqStack * init_SeqStack() SeqStack *S; S=(SeqStack*)malloc(sizeof(SeqStack); S-top=-1; return S; int Empty_SeqStack(SeqStack *S) if(S-top=-1) return 1; else return 0; int Push_SeqStack(SeqStack *S,int x) if(S-top=80-1) return(0); else S-top+; S-dataS-top=x; return(1); int Pop_Se

7、qStack(SeqStack *S,int *p) if(Empty_SeqStack(S)=1) return 0; else *p=S-dataS-top; S-top-; return 1; C_SeQueue *init_SeQueue() C_SeQueue *q; q=(C_SeQueue*)malloc(sizeof(C_SeQueue);q-front=q-rear=80-1; q-num=0; return q; int In_SeQueue(C_SeQueue *q,int x) if(q-num=80) return(-1); else q-rear=(q-rear+1

8、)%80; q-dataq-rear=x; q-num+; return(1); int Out_SeQueue(C_SeQueue *q,int *p) if(q-num=0) return -1; else q-front=(q-front+1)%80; *p=q-dataq-front; q-num-; return 1; int Empty_SeQueue(C_SeQueue *q) if(q-num=0) return 1; else return 0; LQueue *Init_LQueue() LQueue *q; QNode *p; q=(LQueue*)malloc(size

9、of(LQueue); p=(QNode*)malloc(sizeof(QNode); p-next=NULL; q-front=q-rear=p; return q; void In_LQueue(LQueue *q,int x) QNode *p;p=(QNode*)malloc(sizeof(QNode); p-data=x; p-next=NULL; q-rear-next=p; q-rear=p; int Empty_LQueue(LQueue *q) if(q-front=q-rear) return 1; else return 0; int Out_LQueue(LQueue

10、*q,int *s) QNode *p; if(Empty_LQueue(q)=1) return 0; else p=q-front-next; q-front-next=p-next; *s=p-data; free(p); if(q-front-next=NULL) q-rear=q-front; return 1; void main() int n,m=1; LinkStack L=NULL;SeqStack *S;C_SeQueue *Q;LQueue *LQ=NULL; while(m) menu(); scanf(“%d“, switch(n) case 1: L=Init_L

11、inkStack(); break; case 2: StackNode *p=L-next; int flag; flag=Empty_LinkStack(L); if(flag=0) while(p) printf(“%5d“,p-data); p=p-next; else printf(“t 栈空栈空!n“); break; case 3: LinkStack p; int x; printf(“t 请输入一个数请输入一个数:“); scanf(“%d“, L=Push_LinkStack(L,x); p=L-next; printf(“t 您输入的一组数是您输入的一组数是:“); wh

12、ile(p) printf(“%5d“,p-data); p=p-next; break; case 4: int x,*s; LinkStack p; s= L=Pop_LinkStack(L,s); p=L-next; printf(“t 您刚才输入的数是您刚才输入的数是:“); while(p) printf(“%5d“,p-data); p=p-next; printf(“%5dn“,x); break; case 5:S=init_SeqStack();break; case 6: int i,success; success=Empty_SeqStack(S); if(succes

13、s!=1) for(i=0;itop;i+) printf(“%5d“,S-datai); else printf(“t 栈空栈空!n“); break; case 7: int i,success; int x; printf(“t 请输入一个数请输入一个数:“); scanf(“%d“, success=Push_SeqStack(S,x);printf(“t 您输入的数是您输入的数是:“); if(success=1) for(i=0;itop;i+) printf(“%5d“,S-datai); else printf(“t 栈满栈满!n“); break; case 8: int i

14、,success; int x,*p; p= success=Pop_SeqStack(S,p); printf(“t 您刚才输入的数是您刚才输入的数是:“); if(success=1) for(i=0;itop;i+) printf(“%5d“,S-datai); printf(“%5dn“,x); else printf(“t 栈空栈空!n“); break; case 9:Q=init_SeQueue();break;case 10: int i,flag,number; flag=Empty_SeQueue(Q); number=Q-num; if(flag!=1) for(i=(Q-front+1)%80;number0;number-,i=(i+1)%80) printf(“t 请输入一个数请输入一个数:%5d“,Q-datai); else printf(“t 队空队空!n“); break; case 11: int i,flag,number; i

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号