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

网站建设费入如保入账全球新冠疫苗接种率

网站建设费入如保入账,全球新冠疫苗接种率,百度推广联系人,教育机构域名一、了解队列 队列的定义 队列是一种先进先出(FIFO, First In First Out)的数据结构。它的基本特性是:在队列中,元素的插入(入队)发生在队尾,元素的删除(出队)发生在队头…

一、了解队列

队列的定义

        队列是一种先进先出(FIFO, First In First Out)的数据结构。它的基本特性是:在队列中,元素的插入(入队)发生在队尾,元素的删除(出队)发生在队头。队列通常用于需要按顺序处理数据的场景。

基本操作

  1. 初始化队列:创建一个空队列。InitQueue(SqQueue* Q)

  2. 入队:将元素添加到队尾。bool EnQueue(SqQueue* Q, int e)

  3. 出队:从队头移除元素并返回该元素。bool DeQueue(SqQueue* Q, int* e)

  4. 获取队头元素:查看队头元素但不移除它。bool GetHead(SqQueue Q, int* e)

  5. 检查队列是否为空:判断队列是否包含元素。bool isEmpty(SqQueue Q)

  6. 获取队列长度:返回队列中当前元素的数量。int LengthQueue(SqQueue Q)

队列的作用

  1. 任务调度:在操作系统中,队列用于管理任务的执行顺序。
  2. 数据缓冲:在生产者-消费者模型中,队列用于存储生产者生成的数据,以便消费者按顺序处理。
  3. 广度优先搜索(BFS):在图论算法中,队列用于实现广度优先搜索。
  4. 网络请求处理:在服务器中,队列用于管理请求的处理顺序。

队列的优缺点

优点
  1. 简单易用:队列的逻辑结构简单,易于理解和实现。
  2. 高效的插入和删除:在队列的两端(队头和队尾)进行插入和删除操作的时间复杂度为 O(1)。
  3. 适用场景广泛:队列在许多算法和应用中具有重要作用,如任务调度、数据流处理等。
缺点
  1. 固定大小:使用数组实现的队列在初始化时需要定义最大容量,可能导致空间浪费或溢出。
  2. 内存管理:使用链表实现的队列需要额外的内存管理,可能导致内存碎片。
  3. 访问限制:只能访问队头和队尾的元素,无法随机访问队列中的其他元素。

二、队列的顺序存储结构(C语言)

1. 顺序存储结构


#define MaxSize 50 // 定义队列的最大容量为50// 定义顺序队列的结构体
typedef struct {int data[MaxSize]; // 存储队列元素的数组int front;         // 队列头指针,指向队列的第一个元素int rear;          // 队列尾指针,指向队列的最后一个元素的下一个位置
} SqQueue;

2. 初始化队列

// 初始化队列
void InitQueue(SqQueue* Q) {Q->front = 0; // 将队列头指针初始化为0Q->rear = 0;  // 将队列尾指针初始化为0
}

3.  入队


// 入队操作
bool EnQueue(SqQueue* Q, int e) {// 判断队列是否已满,使用环形队列的特性if ((Q->rear + 1) % MaxSize == Q->front) return false;Q->data[Q->rear] = e; // 将元素e插入到队列尾Q->rear = (Q->rear + 1) % MaxSize; // 更新尾指针return true; // 返回成功
}

4.  出队


// 出队操作
bool DeQueue(SqQueue* Q, int* e) {// 判断队列是否为空if (Q->front == Q->rear) return false;*e = Q->data[Q->front]; // 将队列头元素赋值给eQ->front = (Q->front + 1) % MaxSize; // 更新头指针return true; // 返回成功
}

5. 获取队头元素


// 获取队列头元素
bool GetHead(SqQueue Q, int* e) {// 判断队列是否为空if (Q.front == Q.rear) return false;*e = Q.data[Q.front]; // 将队列头元素赋值给ereturn true; // 返回成功
}

6. 检查队列是否为空


// 判断队列是否为空
bool isEmpty(SqQueue Q) {return Q.front == Q.rear; // 如果头指针和尾指针相等,则队列为空
}

7. 获取队列长度


// 获取队列的长度
int LengthQueue(SqQueue Q) {// 计算队列当前长度return (Q.rear + MaxSize - Q.front) % MaxSize;
}

三、队列的链式存储结构(C语言)

1. 链式存储结构


// 定义链表节点
typedef struct QNode {int data;              // 存储数据struct QNode* next;   // 指向下一个节点的指针
} QNode;// 定义链式队列
typedef struct {QNode* front;         // 队列头指针QNode* rear;          // 队列尾指针int length;           // 队列长度
} LinkQueue;

2. 初始化队列


// 初始化队列
bool InitQueue(LinkQueue* Q) {Q->front = (QNode*)malloc(sizeof(QNode)); // 创建一个空节点if (Q->front == NULL) {Q->rear = NULL;return false; // 检查内存分配}Q->front->next = NULL; // 空节点的下一个指针指向NULLQ->rear = Q->front; // front 和 rear 指向同一个空节点Q->length = 0; // 初始化长度为0return true;
}

3.  入队


// 入队操作
bool EnQueue(LinkQueue* Q, int e) {QNode* p = (QNode*)malloc(sizeof(QNode)); // 创建新节点if (p == NULL) return false; // 检查内存分配p->data = e; // 设置节点数据p->next = NULL; // 新节点的下一个指针指向NULLQ->rear->next = p; // 将新节点链接到队列尾Q->rear = p; // 更新队列尾指针if (Q->length == 0) {Q->front = p; // 如果队列之前为空,更新队列头指针}Q->length++; // 更新队列长度return true; // 返回成功
}

4.  出队


// 出队操作
bool DeQueue(LinkQueue* Q, int* e) {// 判断队列是否为空if (Q->length == 0) return false;*e = Q->front->data; // 获取队头元素QNode* p = Q->front; // 保存当前头节点Q->front = p->next; // 更新队头指针free(p); // 释放原头节点Q->length--; // 更新队列长度return true; // 返回成功
}

5. 获取队头元素


// 获取队列头元素
bool GetHead(LinkQueue Q, int* e) {// 判断队列是否为空if (Q.length == 0) return false;*e = Q.front->data; // 获取队头元素return true; // 返回成功
}

6. 检查队列是否为空


// 判断队列是否为空
bool isEmpty(LinkQueue Q) {return Q.length == 0; // 如果长度为0,则队列为空
}

7. 获取队列长度


// 获取队列的长度
int LengthQueue(LinkQueue Q) {return Q.length; // 返回队列长度
}

四、总代码(C语言)

1. 顺序存储结构-使用示例

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>#define MaxSize 50 // 定义队列的最大容量为50// 定义顺序队列的结构体
typedef struct {int data[MaxSize]; // 存储队列元素的数组int front;         // 队列头指针,指向队列的第一个元素int rear;          // 队列尾指针,指向队列的最后一个元素的下一个位置
} SqQueue;// 初始化队列
void InitQueue(SqQueue* Q) {Q->front = 0; // 将队列头指针初始化为0Q->rear = 0;  // 将队列尾指针初始化为0
}// 判断队列是否为空
bool isEmpty(SqQueue Q) {return Q.front == Q.rear; // 如果头指针和尾指针相等,则队列为空
}// 入队操作
bool EnQueue(SqQueue* Q, int e) {// 判断队列是否已满,使用环形队列的特性if ((Q->rear + 1) % MaxSize == Q->front) return false;Q->data[Q->rear] = e; // 将元素e插入到队列尾Q->rear = (Q->rear + 1) % MaxSize; // 更新尾指针return true; // 返回成功
}// 出队操作
bool DeQueue(SqQueue* Q, int* e) {// 判断队列是否为空if (Q->front == Q->rear) return false;*e = Q->data[Q->front]; // 将队列头元素赋值给eQ->front = (Q->front + 1) % MaxSize; // 更新头指针return true; // 返回成功
}// 获取队列的长度
int LengthQueue(SqQueue Q) {// 计算队列当前长度return (Q.rear + MaxSize - Q.front) % MaxSize;
}// 获取队列头元素
bool GetHead(SqQueue Q, int* e) {// 判断队列是否为空if (Q.front == Q.rear) return false;*e = Q.data[Q.front]; // 将队列头元素赋值给ereturn true; // 返回成功
}int main() {SqQueue Q;InitQueue(&Q); // 初始化队列// 入队操作for (int i = 1; i <= 5; i++) {if (EnQueue(&Q, i)) {printf("入队: %d\n", i);}else {printf("队列已满,无法入队: %d\n", i);}}// 获取队头元素int head;if (GetHead(Q, &head)) {printf("队头元素: %d\n", head);}else {printf("队列为空,无法获取队头元素。\n");}// 输出队列长度printf("当前队列长度: %d\n", LengthQueue(Q));// 出队操作int e;while (!isEmpty(Q)) {if (DeQueue(&Q, &e)) {printf("出队: %d\n", e);}else {printf("队列为空,无法出队。\n");}}// 再次检查队列是否为空if (isEmpty(Q)) {printf("队列现在为空。\n");}return 0;
}

2. 链式存储结构

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>// 定义链表节点
typedef struct QNode {int data;              // 存储数据struct QNode* next;   // 指向下一个节点的指针
} QNode;// 定义链式队列
typedef struct {QNode* front;         // 队列头指针QNode* rear;          // 队列尾指针int length;           // 队列长度
} LinkQueue;// 初始化队列
bool InitQueue(LinkQueue* Q) {Q->front = (QNode*)malloc(sizeof(QNode)); // 创建一个空节点if (Q->front == NULL) {Q->rear = NULL;return false; // 检查内存分配}Q->front->next = NULL; // 空节点的下一个指针指向NULLQ->rear = Q->front; // front 和 rear 指向同一个空节点Q->length = 0; // 初始化长度为0return true;
}// 判断队列是否为空
bool isEmpty(LinkQueue Q) {return Q.length == 0; // 如果长度为0,则队列为空
}// 入队操作
bool EnQueue(LinkQueue* Q, int e) {QNode* p = (QNode*)malloc(sizeof(QNode)); // 创建新节点if (p == NULL) return false; // 检查内存分配p->data = e; // 设置节点数据p->next = NULL; // 新节点的下一个指针指向NULLQ->rear->next = p; // 将新节点链接到队列尾Q->rear = p; // 更新队列尾指针if (Q->length == 0) {Q->front = p; // 如果队列之前为空,更新队列头指针}Q->length++; // 更新队列长度return true; // 返回成功
}// 出队操作
bool DeQueue(LinkQueue* Q, int* e) {// 判断队列是否为空if (Q->length == 0) return false;*e = Q->front->data; // 获取队头元素QNode* p = Q->front; // 保存当前头节点Q->front = p->next; // 更新队头指针free(p); // 释放原头节点Q->length--; // 更新队列长度return true; // 返回成功
}// 获取队列的长度
int LengthQueue(LinkQueue Q) {return Q.length; // 返回队列长度
}// 获取队列头元素
bool GetHead(LinkQueue Q, int* e) {// 判断队列是否为空if (Q.length == 0) return false;*e = Q.front->data; // 获取队头元素return true; // 返回成功
}int main() {LinkQueue Q;int e;// 初始化队列  if (!InitQueue(&Q)) {printf("初始化队列失败\n");return 1; // 初始化失败,退出程序  }// 检查队列是否为空  if (isEmpty(Q)) {printf("队列为空\n");}// 入队操作  EnQueue(&Q, 10);EnQueue(&Q, 20);EnQueue(&Q, 30);// 获取队列长度  printf("队列长度: %d\n", LengthQueue(Q));// 获取队列头元素  if (GetHead(Q, &e)) {printf("队列头元素: %d\n", e);}// 出队操作并打印  while (!isEmpty(Q)) {if (DeQueue(&Q, &e)) {printf("出队元素: %d\n", e);}}// 再次检查队列是否为空  if (isEmpty(Q)) {printf("队列为空\n");}// 清理工作// 释放所有节点QNode* current = Q.front;while (current != NULL) {QNode* temp = current;current = current->next;free(temp);}return 0;
}

参考:

1. 数据结构-栈

2. 数据结构-线性表-了解循环链表

3. 数据结构-线性表-单链表


文章转载自:

http://sTP7EPqk.xkwyk.cn
http://dFkUClOx.xkwyk.cn
http://BENHs1Vm.xkwyk.cn
http://wnGVx8DH.xkwyk.cn
http://RGebnTVl.xkwyk.cn
http://ETAsg7bD.xkwyk.cn
http://FwuhnGld.xkwyk.cn
http://TBYX3e4T.xkwyk.cn
http://C9mlakw8.xkwyk.cn
http://WI7YdhUl.xkwyk.cn
http://TtwwrHds.xkwyk.cn
http://JtKIHwYf.xkwyk.cn
http://UNsnyf9P.xkwyk.cn
http://dzD63DFg.xkwyk.cn
http://ICB0KTOn.xkwyk.cn
http://euf2gVuR.xkwyk.cn
http://Pd4y6ryK.xkwyk.cn
http://mbLm7HIw.xkwyk.cn
http://DRnJbztx.xkwyk.cn
http://ST46HPOH.xkwyk.cn
http://Ju4Sjtiw.xkwyk.cn
http://DwqrvTUy.xkwyk.cn
http://LX7Z1YWj.xkwyk.cn
http://eAHMJcIz.xkwyk.cn
http://kjadENop.xkwyk.cn
http://OgyTam6s.xkwyk.cn
http://pDI8LyOR.xkwyk.cn
http://0zzXaJu8.xkwyk.cn
http://bZ8CdQOZ.xkwyk.cn
http://XK5SdRFf.xkwyk.cn
http://www.dtcms.com/wzjs/759613.html

相关文章:

  • 用什么软件建网站最方便莱芜网络公司网站
  • 网站建设的知识和技能河北省建设项目信息网站
  • 泰州市统计局网站建设方案中国纪检监察报记者
  • 做网站 用 显示器windows2008 建网站
  • 中文网站建设公司《工程建设》官方网站
  • 建设部证书查询官方网站网站建设公司 - 百度
  • wordpress建站事例太原企业网站模板建站
  • 用别人网站做app的危害买电脑wordpress
  • 夏邑做网站私人定制网站
  • 网站海外推广外包小程序平台哪个好
  • githup网站建设要解析做邮箱以及网站
  • 网站开发it项目规划书学校让做网站做完怎么交
  • 网站的定位wordpress国内打开速度慢
  • 百度公司做网站建站行业有哪些
  • 百度怎么推广网站免费自助建站自助建站平台
  • 内蒙网站设计公司白云地网站建设
  • 深圳哪些公司做网站如何更改网站模板
  • 把网站做静态化常见网站颜色搭配
  • 麻江网站建设seo合作代理
  • 男生女生做污事网站 localhost网站建设维护要求
  • 公司做的网站计入什么seo对于电子商务网站推广的作用
  • 自己建网站卖东西怎么样wordpress顶部滑动
  • 旅游网站模板 手机百度搜索这个网站为什么这么差
  • 网站制作 商城wordpress插件升级
  • 网站分析 工具策划方案
  • 建设网站的重点与难点在于十大平面设计公司
  • 衡水林熠网站建设公司Wordpress页面打开慢
  • 专门做二手书网站或app上海住房和城乡建设部网站
  • 永州网站建设gwtcms个人备案网站可以做商城吗
  • 太原建站网站模板正规的丹阳网站建设