数据结构学习笔记--队列

简介: 引子:只有学习才是激情的生命,才是燃烧的岁月,才是完美的人生 声明:本笔记由《嵌入式系统软件设计中的数据结构》产生,旨在提升自己的软件设计水平,绝无侵权行为,望转载者备注说明 一 队列逻辑结构 1 是一种只允许在表的一端-“队尾“进行插入,而在另一端-”队头“进行删除的线性表。实则为线性表的一种特例。也称为先进先出表 2 当队列中没有结点时称为空队列。队列的修改是依照先进先出的原则

引子:只有学习才是激情的生命,才是燃烧的岁月,才是完美的人生

声明:本笔记由《嵌入式系统软件设计中的数据结构》产生,旨在提升自己的软件设计水平,绝无侵权行为,望转载者备注说明

一 队列逻辑结构

1 是一种只允许在表的一端-“队尾“进行插入,而在另一端-”队头“进行删除的线性表。实则为线性表的一种特例。也称为先进先出表
2 当队列中没有结点时称为空队列。队列的修改是依照先进先出的原则进行的


二 队列的基本运算

置空队 SetNull(Q):将队列 Q 置成空的队列

判队空 Empty(Q):若 Q 为空队列,返回”真“,否则为”假“

取头结点 GetFront(Q):读取队列 Q 的头结点的值,队列中的结点保持不变

入队 InQuery(Q, x):将结点 x 插入到队列 Q 的队尾

出队 DeQuery(Q):删除队列头结点


三 队列分类

1 顺序队列 

 采用顺序存储结构,实则为运算受限的顺序表,可用一维数组来存放结点数据

 front 指示队列当前队头结点的数组下标的位置

 rear 指示队列当前队尾结点的数组下标的位置

 结构描述

 +++++++++++++++++++++++++++++++++++++++++++++++

  #define maxsize 1024                                                                

  typedef int datatype;                                                                    

  typedef struct                                                                                    

  {                                                                                                       

     datatype data[maxsize];    //存放数据元素的一维数组                                                       

     int front;                                //头结点                                                       

     int rear;                                 //尾结点                                                       

  }sequery;                                                                                       

++++++++++++++++++++++++++++++++++++++++++++++++


顺序队列的队头和队尾的标志位置分析

front指向当前队列头结点的前一个位置

rear指向当前队列尾结点的位置


队列的溢出情况分析

出队运算:front++;//头指针 +1

当空队时,front = rear,若再做出队操作,会产生“下溢”

入队运算:rear++;//尾指针 +1

                    data[rear] =  x; //x 入队

当队满时,再做入队操作会产生“上溢”

假上溢 原因:被删除的结点(出队结点)的空间永远不能再使用


2 循环队列

将顺序队列首尾相连,即 data[0] 接在 data[max - 1] 之后

循环队列克服假上溢

若当前尾指针等于数组的上界(max - 1),再做入队操作时,令尾指针等于数组的下界(0)

入队:rear = (rear + 1) % max;

            data[rear] = x;

出队:front = (front + 1) % max;

循环队列队空队满情况:

少用一个结点空间,即头结点指向的空间不使用

队空:front = rear

队满:(rear + 1) % max = front;


循环队列的运算

+++++++++++++++++++++++++++++++++++++++++++++++++++++

/* 置空队 */

void SetNull(sequeue * sq)

{

    sq->front = 0;

    sq->rear = 0;

}

/* 判队空 */

int Empty(sequeue * sq)

{

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

        return 1;

    else

        return 0;

}

/* 取头结点 */

datatype GetFront(sequeue *sq)

{

    if (Empty(sq))

    {

        printf("queue is null");

        return(NULL);

        /**

         * For GCC Warning

         */

    }

    else

        return(sq->data[(sq->front+1)%max]);

}

/* 入队 */

int InQueue(sequeue * sq, datatype x)

{

    if ((rear + 1)%max == sq->front)

    {

        printf("queue is full");

        return(NULL);

    }

    else

    {

        sq->rear = (sq->rear+1)%max;

        sq->data[sq->rear] = x;

        return 1;

    }

}

/* 出队 */

datatype DeQueue(sequeue * sq)

{

    if (Empty(sq))

    {

        printf("queue is full");

        return(NULL);

    }

    else

    {

        sq->front = (sq->front+1)%max;

        return(sq->data[sq->front]);

    }

}

+++++++++++++++++++++++++++++++++++++++++++++++++++++


3 链队列

采用链式存储的队列,类似单链表,但其操作受限,只允许在表头删除节点和在表为插入节点

未完待续

目录
相关文章
|
27天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
123 9
|
2月前
|
缓存 算法 调度
数据结构之 - 双端队列数据结构详解: 从基础到实现
数据结构之 - 双端队列数据结构详解: 从基础到实现
71 5
|
2月前
|
存储 算法 搜索推荐
探索常见数据结构:数组、链表、栈、队列、树和图
探索常见数据结构:数组、链表、栈、队列、树和图
108 64
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
初步认识栈和队列
初步认识栈和队列
61 10
|
2月前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
23 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
2月前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
32 2
【数据结构】--- 栈和队列
【数据结构】--- 栈和队列
|
2月前
|
消息中间件 存储 Java
数据结构之 - 深入探析队列数据结构: 助你理解其原理与应用
数据结构之 - 深入探析队列数据结构: 助你理解其原理与应用
36 4
|
2月前
【初阶数据结构】深入解析队列:探索底层逻辑
【初阶数据结构】深入解析队列:探索底层逻辑