双端队列实验报告.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
双端队列. 实验报告 一、问题描述:双端队列是一个可以在任意一端进行插入和删除操作的队列。表的两端分别成为端点1和端点2。设计双端队列的数据结构,实现入队、出队等基本操作。 二、代码描述 #include stdio.h #include malloc.h #define MAXQSIZE 100 #define ERROR 0 #define OK 1 typedef struct{ int *base; int end1; int end2; }DoubleQueue,*DQueue; int initDQueue(DQueue q){ //初始双端队列,因为要求入队出队不能移动元素,所以用类似于循环队列的结构存储双端队列 //end1代表左端,指向第一个元素,end2代表右端,指向最后一个元素的下一个位置 //初始时,左右端都指向0 q-base =(int*)malloc(MAXQSIZE*sizeof(int)); if(!q-base)exit(0); q-end1=q-end2=0; } int enDQueue(DQueue q,int i,int e){ //入队。i代表从左端还是右端入队。1代表左端,2代表右端,规定只输入1或2则可实现受限的双端队列 if((q-end2+1)%MAXQSIZE==q-end1){//判断栈是否满 ?? printf(Queue is full...\n); ?? exit(0); } if(i==1){//从左端入队 ?? if(q-end1==q-end2){//因为左端指针指向的是第一个元素,则入队时要判断队是否为空,要分别处理。 ??? q-base[q-end1]=e; ??? q-end1=(q-end1+MAXQSIZE)%MAXQSIZE; ??? q-end2=(q-end2+1)%MAXQSIZE; ?? }else{ ??? int t=(q-end1-1+MAXQSIZE)%MAXQSIZE;//鉴于当左端指针为零时,减1会出现负值,则用(q-end1-1+MAXQSIZE)%MAXQSIZE处理 ??? q-base[t]=e; ??? q-end1=t; ?? } ?? return OK; }else if(i==2){ ?? q-base[q-end2]=e; ?? q-end2=(q-end2+1)%MAXQSIZE; ?? return OK; }else{ ?? printf(Wrong queue number....); ?? exit(0); } } int deDQueue(DQueue q,int i){ //出队 if(q-end2==q-end1){//出队时,判断队列是否为空 ?? printf(Queue is empty...\n); ?? exit(0); } if (i == 1) { ?? int e =q-base[q-end1]; ?? q-end1=(q-end1+1)%MAXQSIZE; ?? return e; } else if (i == 2) { ?? int t=(q-end2-1+MAXQSIZE)%MAXQSIZE; ?? int e=q-base[t]; ?? q-end2=t; ?? return e; } else { ?? printf(Wrong queue number....); ?? exit(0); } } main(){int num,i,a[100]; DQueue q = (DQueue)malloc(sizeof(DoubleQueue)); initDQueue(q); printf(the whole number is: ); scanf(%d,num); printf(please input the numbers: \n); for(i=1;i=num;i++) { scanf(%d,a[i]); enDQueue(q,2,a[i]); } printf(chu dui de jie guo shi :\n); printf(%d\n,deDQueue(q,2)); printf(%d\n,deDQueue(q,1)); } 三、测试运行 显示:the whole number is: 输入:5 显示:please input the numbers: 输入:2 3 4 5 6 运行结果显示: chu dui de jie guo shi : 6 2

文档评论(0)

zhuliyan1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档