《数据结构》课件第3章.ppt

  1. 1、本文档共131页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

voidoutLinkQueue(LinkQueue*q){/*链队列元素依次显示*/ LinkQNode*p; p=q-front; printf(队列元素显示:); while(p!=q-rear) {p=p-next; ?printf(%d,p-data);} printf(\n);}main(){ LinkQueuelq,*p; intj; p=lq; initLinkQueue(p); printf(“输入一整数(奇数——入队列、偶数——删除队头元素、0——退出):); scanf(%d,j); while(j!=0)/*输入0——退出*/ {if(j%2==1) enLinkQueue(p,j);/*输入奇数——入队列*/else j=delLinkQueue(p); /*输入偶数——删除队头元素*/outLinkQueue(p);printf(“\n输入一整数(奇数——入队列、偶数——删除队头元素、0——退出):);scanf(“%d”,j);/*继续输入*/}}(3)入队操作。intenterQueue(LinkQueue*q,Elemtypex) /*将数据元素x插入到队列q中*/{Node*s;s=(Node*)malloc(sizeof(Node));if(s!=NULL){ s-data=x; s-next=NULL; q-rear-next=s; q-rear=s; return(1);} elsereturn(0); /*溢出!*/}(4)出队操作。intdeleteQueue(LinkQueue*q,Elemtype*x)/*将队列q的队头元素出队,并存放到x所指向的存储空间中*/{Node*s;if(q-front==q-rear)return(0);s=q-front-next;q-front-next=s-next;/*队头元素s出队*/if(q-rear==s) /*如果队中只有一个元素s,则s出队后成为空队*/q-rear=q-front;*x=s-data;free(s); /*释放存储空间*/return(1);}本章小结栈和队列是两种常见的数据结构,它们都是操作受到限制的线性表。栈的插入和删除均是在栈顶进行,它是后进先出的线性表;队列的插入在队尾,删除在队头,它是先进先出的线性表。当解决具有先进先出(或后进先出)特性的实际问题时,可以使用队列(或栈)这类数据结构来求解。和线性表类似,依照存储表示的不同,栈有顺序栈和链栈,队列有顺序队列和链队列两种,而实际使用的顺序队列是循环队列。在队列中解决假溢出的方法有三种:一是每删除一个元素后就将整个队列的元素向队头移动一个位置;二是在发生假溢出时将整个队列中的元素向队头移动,直到front=-1为止;三是采用循环队列。在非循环的顺序队列中判断队空的条件是front?=?rear,判断队满的条件是rear?=?MAXSIZE-1;在循环队列中判断队空的条件是front?=?rear。而判断队满的方法有两种:一种是设置一个判断队满的标志位;另一种是少用一个元素空间,用front?=?(rear+l)%MAXSIZE作为队满的条件。本章还介绍了顺序栈、链栈、循环队列和链队列的一些基本操作的实现算法,并举出了栈和队列在实际应用中的例子。习题三一、填空题1.栈是限定仅在表尾进行操作的线性表,表头端称为,表尾端称为,栈的操作特性是。2.队列是限定仅在表尾进行和在表头端进行的线性表,队列的操作特性是。3.以下定义了一个顺序栈:#defineMAXSTACK500typedefstruct{

文档评论(0)

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

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

1亿VIP精品文档

相关文档