数据结构-----队列

目录

前言

队列

定义 

队列的定义和操作方法

 队列节点的定义

 操作方式

 顺序表实现队列(C/C++代码)

链表实现队列(C/C++代码)

Python语言实现队列


前言

        排队是我们日常生活中必不可少的一件事,去饭堂打饭的时候排队,上公交车的时候排队等等,那排队的原则就是先到先得,排在前面的人先打饭,同样的在数据结构当中,有一种数据结构类型叫队列,其性质跟排队是一模一样的,下面我们就一起来看看吧!

队列

定义 

        队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。

        队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表

 

队列可以通过顺序表实现和链表实现,下面就一起来看看吧!  

队列的定义和操作方法

 队列节点的定义

顺序表:

//队列定义
typedef struct queue {ElemType data[Maxsize];int front;//指向队头int rear;//指向队尾
}Queue;

链式:

//定义队列
typedef struct queue {int count;	//计数Node* front;//指向队头指针Node* rear;//指向队尾指针
}Queue;

 操作方式

void Queue_init(Queue* queue);//初始化bool isEmpty(Queue* queue);//判空bool isFull(Queue* queue);//判满void enQueue(Queue* queue, ElemType data);//入队Node* deQueue(Queue* queue);//出队int get_length(Queue* queue);//获取长度void travel_Queue(Queue* queue);//遍历(队头到队尾)void clear_Queue(Queue* queue);//清空销毁

 顺序表实现队列(C/C++代码)

#include <stdio.h>
#include<string.h>
#define Maxsize 20 //最大容量
//顺序表队列//节点数据
typedef struct data {int num;char name[10];
}ElemType;
//队列定义
typedef struct queue {ElemType data[Maxsize];int front;//指向队头int rear;//指向队尾
}Queue;//初始化
void queue_init(Queue* queue) {queue->front = 0;queue->rear = 0;
}//判断是否满队列
bool isFull(Queue* queue) {if (queue->rear == Maxsize) {printf("The queue is full\n");return true;}return false;
}//判断是否空队列
bool isEmpty(Queue* queue) {if (queue->rear == 0) {printf("The queue is etmpy\n");return true;}return false;
}//入队操作
void enQueue(Queue* queue, ElemType data) {if (!isFull(queue)) {//赋值queue->data[queue->rear].num = data.num;strcpy(queue->data[queue->rear].name, data.name);queue->rear++;	//队尾+1,往后移动一位}elseprintf("error\n");
}//出队操作
ElemType deQueue(Queue* queue) {ElemType de_data = { 0 };if (!isFull(queue)) {de_data = queue->data[queue->front];queue->front++;	//队头+1往后移动一位return de_data;}elseprintf("error\n");
}//遍历队列(从队头开始到队尾)
void travel_Queue(Queue* queue) {for (int i = queue->front; i < queue->rear; i++) {printf("%d %s\n", queue->data[i].num, queue->data[i].name);}printf("printf over!\n");
}//获取队列长度
int get_Queuelength(Queue* queue) {return queue->rear-queue->front;
}//清空队列
void clear_Queue(Queue* queue) {queue_init(queue);//直接恢复出厂设置
}int main(void)
{Queue queue;queue_init(&queue);ElemType data[4] = { {15,"fuck"},{16,"wdf"},{17,"wtmc"},{18,"cnmb"} };for (int i = 0; i < 4;i++) {enQueue(&queue, data[i]);}deQueue(&queue);travel_Queue(&queue);
}//16 wdf
//17 wtmc
//18 cnmb
//printf over!

链表实现队列(C/C++代码)

#include<stdio.h>
#include<string.h>
#include <stdbool.h>
#include<stdlib.h>
#include<assert.h>
#define Maxsize 20typedef struct datatype {int num;char name[10];
}ElemType;
//定义节点
typedef struct node {ElemType data;struct node* next;
}Node;
//定义队列
typedef struct queue {int count;	//计数Node* front;//指向队头指针Node* rear;//指向队尾指针
}Queue;void Queue_init(Queue* queue);//初始化
bool isEmpty(Queue* queue);//判空
bool isFull(Queue* queue);//判满
void enQueue(Queue* queue, ElemType data);//入队
Node* deQueue(Queue* queue);//出队
int get_length(Queue* queue);//获取长度
void travel_Queue(Queue* queue);//遍历
void clear_Queue(Queue* queue);//清空销毁int main()
{Queue myqueue;Queue_init(&myqueue);ElemType data[4] = { {15,"a"},{16,"wb"},{17,"htt"},{18,"jk"} };for (int i = 0; i < 4; i++) {enQueue(&myqueue, data[i]);}deQueue(&myqueue);travel_Queue(&myqueue);
}
//16 wb
//17 htt
//18 jk
//Printf over//初始化
void Queue_init(Queue* queue) {assert(queue);queue->front = NULL;queue->rear = NULL;queue->count=0;
}//创建节点
Node* create_node(ElemType data) {Node* new_node = (Node*)malloc(sizeof(Node));if (new_node) {new_node->data = data;new_node->next = NULL;return new_node;}else{printf("ERRPR\n");}
}//判断是否空队列
bool isEmpty(Queue* queue) {assert(queue);if (queue->count == 0){printf("The queue is etmpy\n");return true;}return false;
}//判断是否满队列
bool isFull(Queue* queue) {assert(queue);if (queue->count == Maxsize) {printf("The queue is full\n");return true;}return false;
}//入队
void enQueue(Queue* queue, ElemType data) {assert(queue);if (!isFull(queue)) {Node* new_node = create_node(data);//如果队尾指向空的时候,也就是队列为空时if (queue->rear == NULL) {queue->front = new_node;queue->rear = new_node;queue->count++;}//当队列不为空的时候else{queue->rear->next = new_node;queue->rear = new_node;queue->count++;}}else{printf("error\n");}
}//出队
Node* deQueue(Queue* queue) {assert(queue);if (!isEmpty(queue)) {Node* deNode = queue->front;queue->front = deNode->next;queue->count--;return deNode;}printf("error\n");return NULL;
}//获取队列长度
int get_length(Queue* queue) {assert(queue);return queue->count;
}//遍历队列
void travel_Queue(Queue* queue) {assert(queue);Node* cur = queue->front;while (cur) {printf("%d %s\n", cur->data.num, cur->data.name);cur = cur->next;}printf("Printf over\n");
}//清空队列
void clear_Queue(Queue* queue) {assert(queue);Node* cur = queue->front;while (cur) {//要把每一个节点的空间都释放,避免内存泄漏Node* p = cur->next;    //获取到当前节点的下一个节点free(cur);cur = p;}printf("Clear successfully!\n");
}

Python语言实现队列

链接:Python数据结构-----队列_python队列_灰勒塔德的博客-CSDN博客

 以上就是今天的全部内容了,我们下一期再见!!!

分享一张壁纸:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/81877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

彩色相机工作原理——bayer格式理解

早期&#xff0c;图像传感器只能记录光的强弱&#xff0c;无法记录光的颜色&#xff0c;所以只能拍摄黑白照片。 1974年,拜尔提出了bayer阵列&#xff0c;发明了bayer格式图片。不同于高成本的三个图像传感器方案&#xff0c;拜尔提出只用一个图像传感器&#xff0c;在其前面放…

tensorflow基础

windows安装tensorflow anaconda或者pip安装tensorflow&#xff0c;tensorflow只支持win7 64系统&#xff0c;本人使用tensorflow1.5版本&#xff08;pip install tensorflow1.5&#xff09; tensorboard tensorboard只支持chrome浏览器&#xff0c;而且加载过程中可能有一段…

K8S pod资源、探针

目录 一.pod资源限制 1.pod资源限制方式 2.pod资源限制指定时指定的参数 &#xff08;1&#xff09;request 资源 &#xff08;2&#xff09; limit 资源 &#xff08;3&#xff09;两种资源匹配方式 3.资源限制的示例 &#xff08;1&#xff09;官网示例 2&#xff0…

机器学习第七课--情感分析系统

分词 分词是最基本的第一步。无论对于英文文本&#xff0c;还是中文文本都离不开分词。英文的分词相对比较简单&#xff0c;因为一般的英文写法里通过空格来隔开不同单词的。但对于中文&#xff0c;我们不得不采用一些算法去做分词。 常用的分词工具 # encodingutf-8 import …

Python爬虫:获取必应图片的下载链接

文章目录 1. 前言2. 实现思路3. 运行结果 1. 前言 首先&#xff0c;说明一下&#xff0c;本篇博客内容可能涉及到版权问题&#xff0c;为此&#xff0c;小编只说明一下实现思路&#xff0c;至于全部参考代码&#xff0c;小编不粘贴出来。不过&#xff0c;小编会说明详细一些&a…

three.js——模型对象的使用材质和方法

模型对象的使用材质和方法 前言效果图1、旋转、缩放、平移&#xff0c;居中的使用1.1 旋转rotation&#xff08;.rotateX()、.rotateY()、.rotateZ()&#xff09;1.2缩放.scale()1.3平移.translate()1.4居中.center() 2、材质属性.wireframe 前言 BufferGeometry通过.scale()、…

LeetCode: 4. Median of Two Sorted Arrays

LeetCode - The Worlds Leading Online Programming Learning Platform 题目大意 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。 请你找出这两个有序数组的中位数&#xff0c;并且要求算法的时间复杂度为 O(log(m n))。 你可以假设 nums1 和 nums2 不会同时为空。 …

css动画旋转分层旋转图

1.代码 <template><view class"animations"><view class"animation animation1"><view class"animate1"></view><view class"animate2"></view><view class"animate3">&l…

Qt --- Day02

实现效果&#xff1a; 点击登录&#xff0c;检验用户密码是否正确&#xff0c;正确则弹出消息框&#xff0c;点击ok转到另一个页面 不正确跳出错误消息框&#xff0c;默认选线为Cancel&#xff0c;点击Yes继续登录 点击Cancel跳出问题消息框&#xff0c;默认选项No&#xff0c…

Java文字描边效果实现

效果&#xff1a; FontUtil工具类的完整代码如下&#xff1a; 其中实现描边效果的函数为&#xff1a;generateAdaptiveStrokeFontImage() package com.ncarzone.data.contentcenter.biz.img.util;import org.springframework.core.io.ClassPathResource; import org.springfr…

使用vite创建vue3项目及项目的配置 | 环境准备 ESLint配置 prettier配置 husky配置 项目继承

文章目录 使用vite创建vue3项目及项目的配置1.环境准备2.项目配置ESLint校验代码工具配置 - js代码检测工具1.安装ESLint到开发环境 devDependencies2.生成配置文件:.eslint.cjs**3.安装vue3环境代码校验插件**4. 修改.eslintrc.cjs配置文件5.生成ESLint忽略文件6.在package.js…

[BJDCTF2020]Mark loves cat foreach导致变量覆盖

这里我们着重了解一下变量覆盖 首先我们要知道函数是什么 foreach foreach (iterable_expression as $value)statement foreach (iterable_expression as $key > $value)statement第一种格式遍历给定的 iterable_expression 迭代器。每次循环中&#xff0c;当前单元的值被…

Learn Prompt-ChatGPT 精选案例:广告文案

ChatGPT 可以帮助我们生成广告文案和宣传图片&#xff0c;这对营销品牌建设很有帮助。通常&#xff0c;一个产品会有一个主要的广告词&#xff0c;传达设计理念或宣传产品的好处。我们可以尝试直接生成文案&#xff0c;看看 ChatGPT 有没有好的创意。假设我们的产品是一款登山鞋…

计算机专业毕业设计项目推荐06-工作室管理系统(Java+Vue+Mysql)

工作室管理系统&#xff08;JavaSpringVueMysql&#xff09; **介绍****系统总体开发情况-功能模块****各部分模块实现****最后想说的****联系方式** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较…

Word 文档转换 PDF、图片

工作有需要 Word 文档转换 PDF、图片 的场景&#xff0c;我们来看看 Java 开发中怎么解决这个问题的。 Word 转 PDF Word 转 PDF 分为商用 Aspose 方案和开源 Apache POIiText 方案。 Aspose 方案 这种方式在目前来看应该是最好的&#xff0c;无论是转换的速度还是成功的概…

100道基于Android毕业设计的选题题目,持续更新

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 大家好&#xff0c;我是程序员徐师兄、今天给大家谈谈基于android的app开发毕设题目&#xff0c;以及基于an…

深入理解Java单例模式和优化多线程任务处理

目录 饿汉模式懒汉模式单线程版多线程版双重检查锁定 阻塞队列 单例模式能保证某个类在程序中只存在唯一一份实例, 而不会创建出多个实例&#xff0c;并提供一个全局访问点。 饿汉模式 类加载的同时&#xff0c;创建实例。 class Singleton {private static final Singlet…

运维自动化:提高效率的秘诀

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

GEE:快速实现NDVI时间序列NDVI线性趋势和变化敏感性计算(斜率、截距)

作者:CSDN @ _养乐多_ 本博客将向您介绍如何使用Google Earth Engine(GEE)平台来处理Landsat 5、7和8的卫星图像数据,计算NDVI的斜率和截距,以及如何导出这些结果供进一步分析使用。 文章目录 一、代码详解1.1 核心代码详解1.2 核心代码详解1.3 代码框架介绍二、完整代码…

day06_Java中的流程控制语句

流程控制 简单来讲所谓流程就是完成一件事情的多个步骤组合起来就叫做一个流程。在一个程序执行的过程中&#xff0c;各条语句的执行顺序对程序的结果是有直接影响的。我们必须清楚每条语句的执行流程。而且&#xff0c;很多时候要通过控制语句的执行顺序来实现我们想要的功能…