王道考研数据结构--4.1.顺序队列

news/2024/11/30 14:44:00/

目录

前言

1.顺序队列的定义

2. 顺序队列的结构

3.顺序队列的操作

3.1定义顺序队列

3.2初始化

3.3入队

3.4出队

3.5遍历求表长

3.6清空,销毁队列

4.完整代码


前言

日期:2023.7.25

书籍:2024年数据结构考研复习指导(王道考研系列)

内容:实现顺序队列的基本实现,主要功能如下:
1.顺序队列的数据结构
2.入队
3.出队
4.遍历
5.求队长

6.清空,销毁

1.顺序队列的定义

        首先我们来看看什么是队列?

        队列是一种先进先出(FIFO)的线性表,它只允许在表的一端进行插入,而在另一端删除元素。这和我们日常生活中的排队是一致的,最早进入队列的元素最早离开。队列的结构图如下所示:

       明白了队列之后,顺序队列就非常简单了,用顺序存储结构表示的队列就简称为顺序队列。和顺序栈相类似,在队列的顺序存储结构中,除了用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外,尚需附设两个指针front和rear分别指示队列头元素及队列尾元素的位置。

        为了在C语言中描述方便起见,在此我们约定:初始化建空队列时,令front=rear=0,每当插人新的队列尾元素时,“尾指针增1”;每当删除队列头元素时,“头指针增1”。因此,在非空队列中,头指针始终指向队列头元素,而尾指针始终指向队列尾元素的下一个位置。了解了顺序队列之后,我们可以发现顺序队列有一个很大的缺点,它会出现虚假的满状态,为了解决这个问题我们可以将其改造成循环队列(循环队列将在下次进行介绍)。


2. 顺序队列的结构

3.顺序队列的操作

3.1定义一个顺序队列

#define MaxSize 50
typedef int ElemType;
typedef struct Queue{ElemType data[MaxSize]; //指向队列的存储空间int       front; //指向队头int       rear;  //指向队尾
}Queue;

3.2初始化

//1.初始化
void InitQueue(Queue *Q){Q->front = Q->rear = 0;
}

 3.3入队

//入队操作
bool EnQueue(Queue *Q, ElemType x){//判断队列是否还有存储空间if(Q->rear >= MaxSize)return false;//如果还有存储空间,将数据入队Q->data[Q->rear] = x;Q->rear++;return true;
}

3.4出队

//出队
bool DeQueue(Queue *Q,ElemType *x){//判断队列中的元素是否为空if(Q->front == Q->rear)return false;//如果队列中的元素不为空,进行出队操作*x=Q->data[Q->front];Q->front++;return true;
}

3.5遍历求表长

//4.遍历队列
//打印顺序队列中的元素
bool ShowQueue(Queue *Q){//遍历队头到队尾中的每个元素,并将其打印输出for(int i=Q->front; i<Q->rear; ++i){printf("%d ",Q->data[i]);}printf("\n");return true;
}//5.求队长
//获取队列元素个数
int Length(Queue *Q){//将尾指针位置减去头指针的位置就是队列中元素的个数return (Q->rear - Q->front);
}

3.6清空,销毁队列


//6.清空,销毁队列
//清空队列
bool ClearQueue(Queue *Q){//将队头指针和队尾指针都重置为0Q->front = Q->rear = 0;return true;
}
//销毁队列
void DestroyQueue(Queue *Q){//释放队列的存储空间free(Q);//将队列空间的位置指针置空Q = NULL;
}

4.完整代码

#include <stdio.h>
#include <stdlib.h>#define bool char
#define true 1
#define false 0#define MaxSize 50
typedef int ElemType;
typedef struct Queue{ElemType data[MaxSize]; //指向队列的存储空间int       front; //指向队头int       rear;  //指向队尾
}Queue;//1.初始化
void InitQueue(Queue *Q){Q->front = Q->rear = 0;
}//2.入队
//入队操作
bool EnQueue(Queue *Q, ElemType x){//判断队列是否还有存储空间if(Q->rear >= MaxSize)return false;//如果还有存储空间,将数据入队Q->data[Q->rear] = x;Q->rear++;return true;
}
//3.出栈
//出队
bool DeQueue(Queue *Q,ElemType *x){//判断队列中的元素是否为空if(Q->front == Q->rear)return false;//如果队列中的元素不为空,进行出队操作*x=Q->data[Q->front];Q->front++;return true;
}
//4.遍历队列
//打印顺序队列中的元素
bool ShowQueue(Queue *Q){//遍历队头到队尾中的每个元素,并将其打印输出for(int i=Q->front; i<Q->rear; ++i){printf("%d ",Q->data[i]);}printf("\n");return true;
}//5.求队长
//获取队列元素个数
int Length(Queue *Q){//将尾指针位置减去头指针的位置就是队列中元素的个数return (Q->rear - Q->front);
}//6.清空,销毁队列
//清空队列
bool ClearQueue(Queue *Q){//将队头指针和队尾指针都重置为0Q->front = Q->rear = 0;return true;
}
//销毁队列
void DestroyQueue(Queue *Q){//释放队列的存储空间free(Q);//将队列空间的位置指针置空Q = NULL;
}int main(){Queue Q;InitQueue(&Q);for(int i=1; i<=8; ++i){EnQueue(&Q, i);}ShowQueue(&Q);int x;DeQueue(&Q,&x);printf("%d\n",x);EnQueue(&Q,10);ShowQueue(&Q);
}


http://www.ppmy.cn/news/979039.html

相关文章

WormGPT – 网络犯罪分子用来犯罪的人工智能工具

WormGPT – 网络犯罪分子用来发起商业电子邮件泄露攻击的生成式人工智能工具 前言 什么是蠕虫GPT&#xff08;WormGPT&#xff09; WormGPT是基于EleutherAI于2021年创建的大型语言模型GPT-J的AI模型。它具有无限的字符支持、聊天记忆保留和代码格式化功能。 如果未部署适当…

全志F1C200S嵌入式驱动开发(触摸屏驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 触摸屏一般有两种,一种是电阻触摸屏,一种是电容触摸屏。前者需要自己买一颗i2c的信号读取芯片,用的比较多的是ns2009。后者自身集成了读取芯片,用的比较多的是gt911。正好之前测…

Tensorflow学习

一、处理数据的结构 案例代码如下: import tensorflow.compat.v1 as tf tf.disable_v2_behavior() import numpy as np# create data x_data np.random.rand(100).astype(np.float32) y_data x_data*0.1 0.3# 创建结构(一维结构) Weights tf.Variable(tf.random.uniform(…

小程序如何删除/上架/下架商品

在小程序中&#xff0c;产品的删除、上架和下架是常见的操作&#xff0c;可以根据实际需求来管理商品的展示与销售。下面将介绍如何在小程序中删除上架下架商品的具体步骤。 进入商品管理页面&#xff0c; 在个人中心点击管理入口&#xff0c;然后找到“商品管理”菜单并点击。…

Shell输出帮助手册

代码&#xff1a; 帮助手册雏形 function help(){echo -e "Help manual":echo -e " -h. -- help View the help manual"echo -e " install Installation"echo -e " uninstall Uninstall" }case "$1&qu…

V1.4基站仓储三代标签操作指导

一、管理系统使用 1、启动v1.4基站 插上电源&#xff0c;用网线连接基站和电脑。基站默认ip为192.168.1.200&#xff0c;所以需要修改电脑的IP地址为192.168.1.x&#xff0c;例如&#xff1a;192.168.1.100 ​ 注&#xff1a;当基站第二个灯&#xff08;绿色&#xff09;闪烁…

nodejs+vue+elementui学习交流和学习笔记分享系统

Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。 前端技术&#xff1a;nodejsvueelementui,视图层其实质就是vue页面&#xff0c;通过编写vue页面从而展示在浏览器中&#xff0c;编写完成的vue页面要能够和控制器类进行交互&#xff0c;从而使得用户在点击网页进…

linux下${}、$()、$[]、$(())、[]、[[]]、(())的作用及用法说明

在linux下&#xff0c;特别是shell脚本中&#xff0c;我们经常会遇到${}、$()、$[]、$(())、[]、[[]]、(())&#xff0c;眼花之凌乱&#xff0c;让我们傻傻分不清&#xff0c;下面就为大家讲解一下它们的作用及主要用法 1.${} 首先&#xff0c;当${}用来引用变量时&#xff0…