版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3.2队列
3.2.1队列的定义队列是只能在一端插入、另一端删除的线性表。a1
a2
a3……an出队入队队头(删除元素)队尾(插入元素)队列的特性:先进先出FIFO13.2.2队列的基本运算初始化队列:init_queue(Q)判断队列是否为空:queue_empty(Q)取队头元素:queue_front(Q,x)入队:enqueue(Q,x)出队:outqueue(Q,x)判断队列是否为满:queue_full(Q)23.2.3顺序队列以顺序存储方式存储的队列叫做顺序队列。ana1a2.…..0123maxsize-1datafrontQrear类型说明:typedefstruct{elementtypedata[maxsize];//存放元素的数组intfront,rear;//指向队头的前一个位置和队尾}seqqueue;3难题:如何区分循环队列的满和空状态?方法一:设置一个标志,以区分最后一次操作是入队还是出队操作。当头尾两个指针相等时,由该标志判断队列为满或空。方法二:保留一个空间不用,即将仅剩一个空位置时的状态当作满状态,也就是不让rear指针赶上front指针。5循环队列运算的实现初始化队列: voidinit_queue(seqqueue*Q) {Q->front=0;Q->rear=0;}判断队列是否为空:
BOOLqueue_empty(seqqueueQ) {if(Q.front==Q.rear)returnTRUE; elsereturnFALSE;}
判断队列是否为满:
BOOLqueue_full(seqqueueQ) {if((1+Q.rear)%maxsize==Q.front)returnTRUE; elsereturnFALSE;}
尾指针的下一个位置是头指针所指位置时为满头尾指针相同,则肯定为空6入队
voidEnqueue(seqqueue*Q,elementtypex) {if(queue_full(Q))error(“溢出”);
else{Q->rear=(1+Q->rear)%maxsize; Q->data[Q->rear]=x;}}
取队头元素:elementtypequeue_front(seqqueueQ,elementtype*x) {if(queue_empty(Q))error(“队空”); else*x=Q.data[(Q.front+1)%maxsize]);}队头元素在front指针所指位置的下一个位置往后移动尾指针填进待插入的元素出队
voidOutqueue(seqqueue*Q,elementtype*x) {if(queue_empty(*Q))error(“队空,不能出队”);
else{Q->front=(Q->front+1)%maxsize;
*x=Q->data[Q->front];}}7头结点之后的结点中的值为队头元素链队列运算的实现初始化队列: voidinit_queue(linkqueue*Q) {Q->front=(node*)malloc(sizeof(node));Q->rear=Q->front; Q->front->next=NULL;}产生由头指针指示的头结点尾指针也指向该头结点尾结点的后继指针设置为空取队头元素:
voidqueue_front(linkqueue*Q,elementtype*x); {if(empty(*Q))error(“队空,不能取元素”);
else*x=Q->front->next->data;}判断队为空:
BOOLqueue_empty(linkqueueQ) {returnQ.front==Q.rear;}队头元素的值由x返回首尾指针相等9入队: voidEnqueue(linkqueue*Q,elementtypex) {node*P=(node*)malloc(sizeof(node)); P->data=x; P->next=NULL; Q->rear->next=P; Q->rear=P;}出队:
voidOutqueue(linkqueue*Q,elementtype*x); {if(empty(*Q))error(“队空,不能出队”);
else{*x=Q->front->next->data; node*u=Q->front->next; Q->front->next=u->next;free(u); if(Q->front->next==NULL)Q->rear=Q->front;} }新节点中填入数据后继指针置空连到表尾尾指针指向新插入的节点取队头元素的值保存待删节点的指针删除队头节点释放所删除节点的存储空间删除最后一个节点时,尾指针指向已被删除的节点,应做调整10
3.3数组
3.3.1数组的定义一维数组是有限个相同类型的变量组成的序列。若其中每个变量本身是一维数组,则构成二维数组。(a1,a2,a3,…,an)a11a12a13…a1na21a22a23…a2n…………am1am2am3…amn113.3.3数组的顺序存储行优先存储方式:逐行地顺序存储各元素。列优先存储方式:逐列地顺序存储各元素。a11a12…a1na21a22…a2na31a32…a2n
……am1am2…amna11a21…am1a12a22…am2a13a23…am3…
…a1na2n…amn右边的下标比左边的下标变化快左边的下标比右边的下标变化快13数组元素地址的计算A[i,j]Loc(i,j)=addr0+(Num(i,j)-1)*ci,j=1,2,…Num(i,j)=(i-1)*n+jNum(i,j)=(j-1)*m+i行优先列优先Num(i,j)=i*n+j+1Num(i,j)=j*m+i+1行优先列优先i,j=0,1,…143.3.4矩阵的压缩存储
a11a21a22a31a32a33
………
an1an2…ann例,以行优先方式存储下三角矩阵,aij的序号:下三角元素:num(i,j)=1+2+3+…+(i-1)+j=i(i-1)/2+j上三角元素:num(i,j)=1+2+3+…+(j-1)+i=j(j-1)/2+i
a11a12a13…a1na21a22a23…a2na31a32a33…a3n
………
an1an2an3…ann
(1)对称矩阵和三角矩阵对称矩阵Anxn满足aij=aji(i,j=1,2…n)15(3)稀疏矩阵01200050006000500307001000000000009000000000序行列值11212216532464325535364
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年信阳申信发展投资集团有限公司招聘工作人员18名考前自测高频考点模拟试题附答案
- 2025年四平市教育局直属学校专项招聘高校毕业生笔试备考题库附答案
- 2025年湖南怀化会同县社区专职工作人员招聘10人备考题库附答案
- 2025年黑河漠河市漠河林场公开招聘森林管护员13人(公共基础知识)综合能力测试题附答案
- 2025广东江门开平农商银行校园招聘备考题库附答案
- 2025年甘肃酒泉敦煌市选调事业单位工作人员14人备考题库附答案
- 2025年洛阳职业技术学院招才引智招聘高层次人才12名(公共基础知识)测试题附答案
- 2025广东广州天河区城市管理第三保洁所招聘编外工作人员6人备考题库附答案
- 2025年滁州来安县城市基础设施开发有限公司选聘经理层管理人员1名笔试备考题库附答案
- 吉安武功山旅游发展集团有限公司2026年面向社会公开招聘30名安保人员笔试备考题库及答案解析
- 水利电工程施工地质规程
- JJF 2019-2022 液体恒温试验设备温度性能测试规范
- 耐高温铝电解电容器项目计划书
- DZ∕T 0153-2014 物化探工程测量规范(正式版)
- (高清版)TDT 1013-2013 土地整治项目验收规程
- 国家开放大学电大《计算机应用基础(本) 》 终结性考试试题答案(完整版)
- 《建筑基坑降水工程技术规程》DBT29-229-2014
- 防污闪涂料施工技术措施
- 2023年广东学业水平考试物理常考知识点
- 中外政治思想史-复习资料
- 中国近代史期末复习(上)(第16-20课)【知识建构+备课精研】 高一历史上学期期末 复习 (中外历史纲要上)
评论
0/150
提交评论