当前位置: 首页 > news >正文

【队列的顺序表示,链式表示】

文章目录

  • 队列的表示和实现
    • 相关术语
    • 队列的表示
    • 链队的表示
      • 链队的定义
      • 链队的初始化
      • 销毁链队列
    • 链队列的入队
      • 出栈

队列的表示和实现

相关术语

  • 队列(Queue)是仅在表尾进行插入操作,在表头进行删除操作的线性表。
  • 表尾即an端,称为队尾;表头即在a1端,称为对头。
  • 是一种先进先出的线性表。
    在这里插入图片描述
    插入元素称为入队,删除元素称为出队。
    队列的存储结构为链队或顺序对(常用循环顺序对)。

队列的表示

队列的顺序表示-----用一维数组base[MAXQSIZE]。

//定义队列
typedef struct {int* base;//初始化的动态分配内存空间int front;//头指针int rear;//尾指针
}SqQueue;
}

在这里插入图片描述
初始:front = rear = 0;
在这里插入图片描述
J1,J2,J3入队
入队:base[rear] = x;
rear++;
在这里插入图片描述
J1,J2出队
出队:x = base[front];
front++;
空对标志:front = rear;
在这里插入图片描述
这里的J6已经满了,J3,J4还能入队吗?
当rear=MAXQSIZE时,发生溢出。

  1. 当front = 0;
    rar = MAXQSIZE时再出队真溢出.
    在这里插入图片描述

  2. 当front!=0;rear = MAXQSIZE时,再入队,假溢出。
    在这里插入图片描述
    解决上溢的方法----引入循环队列
    base[0]接在base[MAXQSIZE-1]之后,若rear+1 == M,则令rear= 0;
    实现方法:利用模运算(mod)。
    插入元素:Q.base[Q.rear] = x;
    Q.rear = (Q.rear+1) % MAXQSIZE;
    删除元素:x = Q.base[s.front]
    Q.front = (Q.front+1) % MAXQSIZE;
    在这里插入图片描述
    这里引发了一个二义性,就是front= rear为空队列。需要进行讨论。
    循环队列解决对满时的判断方法----少用一个元素空间。
    在这里插入图片描述
    队空:front == rear;

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

链队的表示

若用户无法估计所用队列的长度,则宜采用链队列。
在这里插入图片描述

链队的定义

//链队列的类型队列
typedef struct Qnode {int data;struct Qnode* next;
}QNode,*QueuePtr;
typedef struct {QueuePtr front;//队头指针QueuePtr rear;//对尾指针
}LinkQueue;

链队的初始化

//初始化
void InitQueue(LinkQueue Q) {Q.front = Q.rear = new QNode;//生成新结点作为头结点,队头和队尾指针指向此结点Q.front->next = NULL;//将空结点的next域置空
}

销毁链队列

在这里插入图片描述

void DestroyQueue(LinkQueue Q) {while (Q.front){QueuePtr p;p = Q.front->next;free(Q.front);Q.front = p;}
}

链队列的入队

在这里插入图片描述

//将元素e入队
void EnQueue(LinkQueue Q, int e) {QueuePtr q = new QNode;if (!q) {exit(0);q->data = e;q->next = NULL;Q.rear->next = p;Q.rear = p;}
}

出栈

int DeQueue(LinkQueue Q, int e) {if (Q.front == Q.rear) {return 0;}QueuePtr p = Q.front->next;e = p->data;Q.front->next = p->next;delete p;return 1;
}
http://www.lryc.cn/news/210997.html

相关文章:

  • Pydantic 实践
  • 获取pandas中的众数
  • SOLIDWORKS Simulation2024仿真10大新功能
  • Java程序设计2023-第二次上机练习
  • 如何在 uniapp 里面使用 pinia 数据持久化 (pinia-plugin-persistedstate)
  • 智慧矿山AI算法助力护帮板支护监测,提升安全与效率
  • shell中的运算
  • 【Java 进阶篇】解决Java Web应用中请求参数中文乱码问题
  • 51单片机-点阵屏led
  • Angular-03:组件模板
  • mysql 操作慢查询日志
  • illuminate/database 使用 二
  • 二叉树的概念
  • SpringCloud之Eureka的学习【详细】
  • 学习ftp
  • Android笔记(九):Compose组件的状态(一)
  • 3.2. onnx export multi_batch
  • 探索低代码PaaS平台的优势与选择原因
  • AD教程(一)工程组成及创建
  • SAP业务从ECC升级到SAP S/4HANA有哪些变化?有哪些功能得到增强?
  • 常用conda和pip命令总结
  • 【计算机网络】路由器的工作原理
  • 队列概念|循环队列的实现
  • 监控数据控中的数据表
  • 进程替换..
  • M1安装OpenPLC Editor
  • STM32F10xx 存储器和总线架构
  • 并发编程
  • Lauterbach使用指南之RunTime功能
  • GaussDB数据库管理系统介绍