iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言数据结构之队列算法详解
  • 219
分享到

C语言数据结构之队列算法详解

2024-04-02 19:04:59 219人浏览 泡泡鱼
摘要

目录一、前言二、基本概念三、顺序队列四、链队列五、循环队列六、总结与提高一、前言 队列在程序设计中经常出现,如:操作系统中的排队问题。 这篇文章主要介绍了队列的

一、前言

  • 队列在程序设计中经常出现,如:操作系统中的排队问题。
  • 这篇文章主要介绍了队列的基本概念、性质,顺序、链、循环三种不同的方法实现队列,顺序和循环队列在算法中比较常用

二、基本概念

  

  • 定义:队列是允许在一端插入,另一端删除的线性表
  • 队头(front):允许删除的一端
  • 队尾(rear):允许插入的一端
  • 特点:先进先出

三、顺序队列

动态图:

算法讲解: 

  • 图解:入队,rear++,出队,front++
  • 真溢出:front==0,rear==n-1
  • 假溢出:front ! = 0,rear==n-1

结构体:


#define MAXQSIZE 100;
Typedef struct{
  QElemType  element[MAXQSIZE];  //队列的元素空间
  int  front;  //头指针,若队列不空,指向队头元素;
  int  rear;    //尾指针,若队列不空,指向队尾元素的下一个位置
}SeqQueue;

四、链队列

  • 定义:用链表实现的队列,为了操作方便,通常采用带头结点的链表结构,设置一个队头指针和队尾指针
  • 队头指针:始终指向头结点
  • 队尾指针:指向当前最后一个元素
  • 空的链队列:队头指针和队尾指针均指向头结点

入队:


int EnterQueue ( LinkQueue *Q; QElemType x ) {
//1. 为待插入结点开辟存储空间
p = ( LinkQueuenode ) malloc ( sizeof ( QNode ) );
if (p==NULL )  return ( FALSE ); // 存储空间分配失败
//2. 将值 x放入新结点的数据域,令新结点的指针域为空
p->data = x; p->next = NULL;
// 3. 将新结点插入到队列 Q 的尾, 并修改队列 Q 的队尾指针
 Q->rear->next = p; 
Q->rear = p; 
 return (TRUE);
} // EnterQueue

出队:


int DeleteQueue ( LinkQueue *Q, QElemType *x ) {
// 1.如果队列为空则无法进行删除,则返回 ERROR
if ( Q->front = = Q->rear ) return (FALSE); 
// 2.令 p 指向队列 Q 的头, 并将队头结点的值取出并放入 x
p = Q->front->next;    x = p->data; 
//3. 修改队头指针
Q->front->next = p->next; 
// 4. 若队中只有一个元素,则P出队后成为空队
if ( Q->rear = = p )  Q->rear = Q->front;
 free ( p ); // 释放队头元素所占空间
return (TRUE);
} // DeleteQueue

五、循环队列

概念:队列的一种顺序表示和实现方法,与顺序栈类似

动态图:

 算法讲解: 

  • A  B  C  D入队时,头指针front不动,rear=(rear+1)%n
  • A  B  C  D出队时,尾指针rear不动,front=(front+1)%n

入队:


int EnterQueue(SeqQueue *Q,QueueElementType x)
{  	
	//1. 判断队列是否已经满了 
    if((Q->rear+1)%MAXSIZE==Q->front)  
               return (FALSE);
   //2. 新元素x入队
	Q->element[Q->rear]=x; 	
   // 3. 重新设置队尾指针
  Q->rear=(Q->rear+1)%MAXSIZE; 	
      return (TRUE);      
}

出队:


int DeleteQueue(SeqQueue *Q,QueueElementType *x)
{
  //1. 判断队列是否已经空了 
		if(Q->front==Q->rear)
		return(FALSE);
 //2. 删除队列的队头元素,用x返回其值
	   *x=Q->element[Q->front];
// 3. 重新设置队头指针
	  Q->front=(Q->front+1)%MAXSIZE;   
     return(TRUE);  
}

特点:

  • 队空: rear==front
  • 队满:(rear+1)%n==front
  • 入队:rear=(rear+1)%n
  • 出队:front=(front+1)%n
  • 队中元素个数:(rear-front+n)%n

六、总结与提高

对于使用c++编程来说,上文队列的判空、判满、插入、删除等等一系列代码,不需要你完全掌握,C++的STL标准库中为你准备好了函数等你调用。

C++queue头文件:


#include<queue>
//#include<bits/stdc++.h>或者万能头文件
using namespace std;

C++queue具体操作:

用queue定义q类(定义什么都可以,只要把s变成定义的字母就可以调用C++中的函数),具体使用方法为:
函数 用法
q.empty() 判断队列是否为空,不为空返回1,为空返回0
q.size() 返回队列中元素个数
q.pop() 删除队列首元素
q.front() 返回队列首元素,不删除该元素
q.back() 返回队列尾元素,不删除该元素
s.push() 队尾插入新的元素

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C语言数据结构之队列算法详解

本文链接: https://www.lsjlt.com/news/161072.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言数据结构之队列算法详解
    目录一、前言二、基本概念三、顺序队列四、链队列五、循环队列六、总结与提高一、前言 队列在程序设计中经常出现,如:操作系统中的排队问题。 这篇文章主要介绍了队列的...
    99+
    2022-11-12
  • C语言数据结构与算法之队列的实现详解
    目录队列的概念及结构队列的实现Queue.hQueue.cTest.c队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FI...
    99+
    2022-11-13
    C语言数据结构 队列 C语言 队列实现 C语言 队列
  • c语言数据结构之栈和队列详解(Stack&Queue)
    目录简介栈一、栈的基本概念1、栈的定义2、栈的常见基本操作二、栈的顺序存储结构1、栈的顺序存储2、顺序栈的基本算法3、共享栈(两栈共享空间)三、栈的链式存储结构1、链栈2、链栈的基本...
    99+
    2022-11-13
  • C语言数据结构不挂科指南之队列详解
    目录队列队列基本概念循环队列顺序队列的 C 语言实现链式队列的 C 语言实现自考要点队列 这篇博客主要介绍一下队列的概念,并且采用 C 语言,编写两种存储实现方式:顺序存储和链式存储...
    99+
    2022-11-13
  • C语言数据结构算法基础之循环队列示例
    目录说明示例代码1. 首先定义结构体:2. 定义各种算法:3. 测试:4. 最后的结果:说明 循环队列是一种先进先出的,首尾相连的队列。 大致的结构如下图: 用数组来抽象的表示一下...
    99+
    2022-11-13
  • C语言数据结构系列队列篇
    目录一、队列(Queue)0x00 队列的概念0x01 队列的结构二、队列的定义0x00 链式队列0x02 接口函数三、队列的实现0x...
    99+
    2022-11-13
  • C利用语言实现数据结构之队列
    目录一、链队列二、链队的表示三、链队的基本操作1. 链队的初始化2. 链队的销毁3. 入队4. 出队四、顺序队列五、循环队列1. 初始化2. 求队列长度3. 入队4. 出队 前言: ...
    99+
    2022-11-12
  • C语言数据结构不挂科指南之栈&队列&数组详解
    目录学习目标栈基本概念栈的基本运算栈的顺序实现双栈栈的链接实现考试要点小结学习目标 自考重点、期末考试必过指南,这篇文章让你理解什么是栈、什么是队列、什么是数组 掌握栈、队列的顺序存...
    99+
    2022-11-13
  • JS数据结构之队列结构详解
    目录一.认识队列二.队列的应用三.队列类的创建四.队列的常见操作五.击鼓传花六.优先级队列七.优先级队列的实现一.认识队列 受限的线性结构: 我们已经学习了一种受限的线性结构:栈结构...
    99+
    2022-11-13
    JS队列结构 JS队列 JS 数据结构
  • C语言数据结构与算法之字符串详解
    目录串的定义串的比较 串的抽象数据类型串的初始化相关定义初始化定长类初始化串的堆式顺序存储结构(Heap)初始化堆字符串 赋值操作比较两个堆字符串的大小 串的定义...
    99+
    2022-11-12
  • C++数据结构的队列详解
    目录前言1.队列的概念及结构2.队列的实现2.1queue.h2.2queue.c2.3test.c总结前言 hello,大家好,这期文章我们来分享数据结构关于队列的知识。希望对大家...
    99+
    2022-11-12
  • Python数据结构之队列详解
    目录0. 学习目标1. 队列的基本概念1.1 队列的基本概念1.2 队列抽象数据类型1.3 队列的应用场景2. 队列的实现2.1 顺序队列的实现2.2 链队列的实现2.3 队列的不同...
    99+
    2022-11-13
  • 详解C语言数据结构之栈
    目录栈的链式实现主要内容代码实现:总结栈的链式实现 主要内容 (1) 栈包含7个元素,依次是67,3,88,6,1,7,0,采用尾插入法创建 栈,为该栈设置两个指针,一个bottom...
    99+
    2022-11-12
  • C语言数据结构之队列的定义与实现
    目录一、队列的性质二、队列的结构三、代码实现头文件功能函数一、队列的性质 上次我们学习栈,了解到栈储存释放数据的方式是:先进后出 而队列与其相反,队列是:先进先出,后进后出。 二、队...
    99+
    2022-11-13
  • C语言数据结构之链队列的基本操作
    目录1.队列的定义2.队列的表示和实现(1)初始化操作(2)销毁队列(3)入队操作(4)出队操作附录完整代码:总结1.队列的定义 队列 (Queue)是另一种限定性的线性表,它只允许...
    99+
    2022-11-12
  • JS数据结构与算法中的队列结构详解
    目录队列结构一.认识队列二.队列的应用三.队列类的创建四.队列的常见操作五.击鼓传花六.优先级队列七.优先级队列的实现队列结构 一.认识队列 受限的线性结构:我们已经学习了一种受限的...
    99+
    2022-11-13
    JS数据结构与算法 JS队列结构
  • 详解python数据结构之队列Queue
    目录一、前言二、Queue的基本格式三、入队列函数 en_queue四、删除数据函数 de_queue一、前言 队列Queue是一种先进先出(FIFO,First In First ...
    99+
    2022-11-12
  • Java 数据结构之队列(Queue)详解
    目录 1、在Java中有哪些常见的队列? 2、Queue 接口分析 3、Deque 接口分析 4、PriorityQueue 的实现原理详解 5、使用Java数组实现队列的简单示例 1、在Java中有哪些常见的队列?         在...
    99+
    2023-10-12
    java 队列 Queue 接口 Deque 接口
  • C语言数据结构进阶之栈和队列的实现
    目录栈的实现:一、栈的概念和性质二、栈的实现思路三、栈的相关变量内存布局图四、栈的初始化和销毁五、栈的接口实现:1.入栈2.出栈3.获取栈顶的数据4.获取栈的元素个数5.判断栈是否为...
    99+
    2022-11-12
  • C语言数据结构之栈与队列的相互实现
    目录一、用对列实现栈代码实现二、用栈实现队列代码实现一、用对列实现栈 题干要求: 细节分析:队列是先进先出; 要实现的栈是先进后出。 解题思路:假设:先用一个队列储存数据 N 个,...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作