第二篇 基本数据结构1.ppt

  1. 1、本文档共70页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
通过上述例子可以看出: 描述这类非数值计算问题的数学模型不再是数学方程,而是诸如表、树和图之类的数据结构。 数据结构: 数据结构是一门研究非数值计算的程序设计问题中计算机操作对象以及它们之间关系和操作的学科。 例题 若让元素1,2,3依次进栈,则出栈顺次序不可能出现 情况 A、 3,2,1 B、2,1,3 C、3,1,2 D、1,3,2 例题 设有一个顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,如果6个元素的出栈顺序为s2,s3,s4,s6,s5,s1则顺序栈的容量至少应为多少? 队列的主要运算 (1)设置一个空队列; (2)插入一个新的队尾元素,称为进队; (3)删除队头元素,称为出队; (4)读取队头元素; 2. 队列的存储结构 (1)顺序存储结构 存在问题 设数组维数为M,则: 当front=0,rear=M时,再有元素入队发生溢出—— 真溢出 当front?0,rear=M时,再有元素入队发生溢出—— 假溢出 例题 p152 设循环队列的容量为70(序号1~70),现经过一系列的入队与出队运算后,有: (1)front=14,rear=21; (2)front=23,rear=12; 问在这两种情况下,循环队列中各有元素多少? 求循环队列元素个数的方法 rearfront,则 length=rear-front; rearfront,则 length=rear+m-front; 【举例1】模拟打印机缓冲区。 在主机将数据输出到打印机时,会出现主机速度与打印机的打印速度不匹配的问题。这时主机就要停下来等待打印机。显然,这样会降低主机的使用效率。为此人们设想了一种办法:为打印机设置一个打印数据缓冲区,当主机需要打印数据时,先将数据依次写入这个缓冲区,写满后主机转去做其他的事情,而打印机就从缓冲区中按照先进先出的原则依次读取数据并打印,这样做即保证了打印数据的正确性,又提高了主机的使用效率。由此可见,打印机缓冲区实际上就是一个队列结构。 an a2 a1 添加 一个元素 x ^ a1 a2 an Q.front Q.rear (2) 链式存储结构(队的容量无法预先估计时采用) Q.front Q.rear 队头 队尾 Q.rear 算法略 见p63 an a2 a1 an a3 a2 Q.front Q.rear 删 除 一个元素 (2) 链式存储结构(队的容量无法预先估计时采用) Q.front Q.rear 队头 队尾 P 算法略 见p64 3.队列 的应用: 队列的应用非常普遍,凡是符合“先来先服务”原则的问题,都可以采用队列结构来解决。 在计算机程序设计中采用很多队列的结构: x y x y b q q p (2) 单链表的插入运算 template class T void linked_ListT::ins_linked_List(T x,T b) {nodeT *p, *q ; p=new nodeT; p-d =b; if (head==NULL){head=p; p-next=NULL; return;} if(head-d==x) {p-next=head; head=p; return;} q=head; while((q-next!=NULL)((q-next)-d!=x) q=q-next; p-next=q-next; q-next=p; return ; } q=head; while((q-next!=NULL)((q-next)-d !=x) q=q-next; p-next=q-next; q-next=p; a1 y ∧ an x head ….. q q指向结点x前一个结点在链表中的位置 a1 a2 ∧ an a3 head ….. 思考:请考虑带头结点的线性链表的插入? template class T int linked_ListT::del_linked_List(T x) { nodeT *p,*q; if(head==NULL) {cout “This is a empty list!”endl;return 0;} if((head-d)==x) {p=head-next; delete head;head=p; return 1;} q=head; while((q-next!=NULL)((q-next)-d !=x) q=q-next; if (q-next==NULL) return 0; p=q-

文档评论(0)

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

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

1亿VIP精品文档

相关文档