C/C++基础入门--【图解数据结构】队列全面总结
小职 2022-01-10 来源 :CSDN 阅读 1979 评论 0

摘要:本篇主要介绍了C/C++基础入门--【图解数据结构】队列全面总结,通过具体的内容展现,希望对c/c++开发的学习有一定的帮助。

本篇主要介绍了C/C++基础入门--【图解数据结构】队列全面总结,通过具体的内容展现,希望对c/c++开发的学习有一定的帮助。

C/C++基础入门--【图解数据结构】队列全面总结

一、前言

C/C++基础入门--【图解数据结构】队列全面总结


队列在程序设计中经常出现,如:操作系统中的排队问题。

这篇文章主要介绍了队列的基本概念、性质,顺序、链、循环三种不同的方法实现队列,顺序和循环队列在算法中比较常用

二、基本概念

   C/C++基础入门--【图解数据结构】队列全面总结


定义:队列是允许在一端插入,另一端删除的线性表


队头(front):允许删除的一端


队尾(rear):允许插入的一端


特点:先进先出


三、顺序队列

动态图:

C/C++基础入门--【图解数据结构】队列全面总结



算法讲解: 


图解:入队,rear++,出队,front++

真溢出:front==0,rear==n-1

假溢出:front ! = 0,rear==n-1

结构体:


#define MAXQSIZE 100;

Typedef struct{

  QElemType  element[MAXQSIZE];  //队列的元素空间

  int  front;  //头指针,若队列不空,指向队头元素;

  int  rear;    //尾指针,若队列不空,指向队尾元素的下一个位置

}SeqQueue;

四、链队列

C/C++基础入门--【图解数据结构】队列全面总结


定义:用链表实现的队列,为了操作方便,通常采用带头结点的链表结构,设置一个队头指针和队尾指针

队头指针:始终指向头结点

队尾指针:指向当前最后一个元素

空的链队列:队头指针和队尾指针均指向头结点

入队:


int EnterQueue ( LinkQueue *Q; QElemType x ) {

//1. 为待插入结点开辟存储空间

p = ( LinkQueueNode ) malloc ( sizeof ( QNode ) );

if (p==NULL )  return ( FALSE ); // 存储空间分配失败

//2. 将值 x放入新结点的数据域,令新结点的指针域为空

p->data = x; p->next = NULL;

// 3. 将新结点插入到队列 Q 的尾, 并修改队列 Q 的队尾指针

 Q->rear->next = p; 

Q->rear = p; 

 return (TRUE);

} // EnterQueue

出队:


int DeleteQueue ( LinkQueue *Q, QElemType *x ) {

// 1.如果队列为空则无法进行删除,则返回 ERROR

if ( Q->front = = Q->rear ) return (FALSE); 

// 2.令 p 指向队列 Q 的头, 并将队头结点的值取出并放入 x

p = Q->front->next;    x = p->data; 

//3. 修改队头指针

Q->front->next = p->next; 

// 4. 若队中只有一个元素,则P出队后成为空队

if ( Q->rear = = p )  Q->rear = Q->front;

 free ( p ); // 释放队头元素所占空间

return (TRUE);

} // DeleteQueue

五、循环队列

概念:队列的一种顺序表示和实现方法,与顺序栈类似

动态图:

C/C++基础入门--【图解数据结构】队列全面总结



 算法讲解: 


A  B  C  D入队时,头指针front不动,rear=(rear+1)%n

A  B  C  D出队时,尾指针rear不动,front=(front+1)%n

入队:


int EnterQueue(SeqQueue *Q,QueueElementType x)

//1. 判断队列是否已经满了 

    if((Q->rear+1)%MAXSIZE==Q->front)  

               return (FALSE);

   //2. 新元素x入队

Q->element[Q->rear]=x;

   // 3. 重新设置队尾指针

  Q->rear=(Q->rear+1)%MAXSIZE;

      return (TRUE);      

}

出队:


int DeleteQueue(SeqQueue *Q,QueueElementType *x)

{

  //1. 判断队列是否已经空了 

if(Q->front==Q->rear)

return(FALSE);

 //2. 删除队列的队头元素,用x返回其值

   *x=Q->element[Q->front];

// 3. 重新设置队头指针

  Q->front=(Q->front+1)%MAXSIZE;   

     return(TRUE);  

}

特点:


队空: rear==front

队满:(rear+1)%n==front

入队:rear=(rear+1)%n

出队:front=(front+1)%n

队中元素个数:(rear-front+n)%n

六、总结与提高

对于使用C++编程来说,上文队列的判空、判满、插入、删除等等一系列代码,不需要你完全掌握,C++的STL标准库中为你准备好了函数等你调用。

 C++queue头文件:


#include<queue>

//#include<bits/stdc++.h>或者万能头文件

using namespace std;

 C++queue具体操作:


用queue定义q类(定义什么都可以,只要把s变成定义的字母就可以调用C++中的函数),具体使用方法为:

C/C++基础入门--【图解数据结构】队列全面总结


208小时视频教程,995份干货资料,扫码领取资料+高薪就业咨询

C/C++基础入门--【图解数据结构】队列全面总结

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程