第七讲队列.pptVIP

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七讲队列.ppt

void enQueue(T x) { QNode *s; s=new QNode; s-data=x; rear-next=s; rear=s; } //插入数据到队列尾部 T deQueue( ) { Qnode *t; T e; if(QueueEmpty()) throw underflow_error(“Queue is empty!in Pop()”); //如果队列中没有数据则抛出异常 //否则在队列头部删除数据 t=front-next; front-next=t-next; e=t-data; free(t); return e; } 循环队列和链队列的比较 时间性能: 循环队列和链队列的基本操作都需要常数时间O (1)。 空间性能: 循环队列:必须预先确定一个固定的长度,所以有存储元素个数的限制和空间浪费的问题。 链队列:没有队列满的问题,只有当内存没有可用空间时才会出现队列满,但是每个元素都需要一个指针域,从而产生了结构性开销。 特殊线性表——队列 栈和队列的应用举例 例:编程序判断一个字符序列是否是回文。 编程思想:     设字符数组str中存放了要判断的字符串。把字符数组中的字符逐个分别存入队列和堆栈,然后逐个出队列和退栈并比较出队列的字符和退栈的字符是否相等,若全部相等则该字符序列是回文,否则就不是回文。 #include stdio.h #include string.h #define MaxQueueSize 100 #define MaxStackSize 100 typedef char DataType; #include SeqCQueue.h #include SeqStack.h“ void HuiWen(char str[]) { SeqCQueue myQueue; SeqStack myStack; char x, y;  int i, length; length = strlen(str);   QueueInitiate(myQueue);   StackInitiate(myStack);   for(i = 0; i length; i++)   { QueueAppend(myQueue, str[i]); StackPush(myStack, str[i]); }    while(QueueNotEmpty(myQueue)==1 StackNotEmpty(myStack)==1){  if(QueueDelete(myQueue, x) == 1 StackPop(myStack, y) == 1 x != y)  { printf(%s不是回文!\n, str); return; } } if(QueueNotEmpty(myQueue) || StackNotEmpty(myStack)) printf(%s不是回文!\n, str); else printf(%s是回文!\n, str); } void main(void) { char str1[] = ABCDEDCBA; char str2[] = ABCDEDCAB; HuiWen(str1); HuiWen(str2); } 第七讲 队列 本讲主要内容: 队列的定义 队列的逻辑结构 队列的顺序存储结构(用数组实现) 队列的链式存储结构(用链表实现) 队列的运算及实现 特殊线性表——队列 队列的逻辑结构 空队列:不含任何数据元素的队列。 队列:只允许在表的一端进行插入数据操作,而另一端进行删除数据操作的线性表。 允许插入数据(也称入队、进队)的一端称为队尾,允许删除数据(也称出队)的一端称为队头。 (a1, a2, ……, an) 队尾 队头 队列的操作特性:先进先出 a1 a2 a3 入队 队尾 队头 出队 特殊线性表——队列 队头 队列的逻辑结构 在计算机系统中,为了解决两个设备之间速度不匹配的问题,通常在内存中设置一个缓冲区,缓冲区是一块连续的存储空间,为了充分利用缓冲区的存储空间,将缓冲区设计成循环队列结构,并为循环队列结构的缓冲区设置一个队首指针和队尾指针,初始时循环队列为空。计算机每处理完一批数据就将其加入到循环队列的队尾;而打印机每处理完一个打印任务,就从循环队列的队首取出下一个要打印的数据。由于打印机的速度比较慢,来不及打印的数据就在缓冲区中排队等待。这就是队列在计算机系统内部的一个比较典型的应用。 特殊线性表——队列的应用 队列的抽象数据类型定义 ADT Queue { 数据对

文档评论(0)

ziyouzizai + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档