数据结构,队列,顺序表队列,链表队列

这篇具有很好参考价值的文章主要介绍了数据结构,队列,顺序表队列,链表队列。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        队列是一种常见的数据结构,它具有先进先出(First-In-First-Out,FIFO)的特性,类似于排队等候的场景。以下是队列的要点:

1. 定义:队列是一种线性数据结构,由一系列元素组成,可以进行插入和删除操作。插入操作(称为入队)只能在队列的末尾进行,删除操作(称为出队)只能从队列的前端进行。

2. 特性:队列遵循先进先出的原则,最先入队的元素将最先出队。

3. 基本操作:
   - 入队(Enqueue):将元素插入到队列的末尾。
   - 出队(Dequeue):从队列的前端删除一个元素,并返回删除的元素。
   - 队列是否为空(isEmpty):判断队列是否为空,即没有任何元素。
   - 队列长度(size):返回队列中元素的个数。

4. 实现方式:
   - 数组:使用数组实现队列时,需要维护两个指针,一个指向队列的前端,另一个指向队列的末尾。出队时移动前端指针,入队时移动末尾指针。注意需要循环利用数组空间。
   - 链表:使用链表实现队列时,新元素可以直接添加到链表末尾,出队时删除链表的头节点。

5. 队列的应用:
   - 广度优先搜索算法(BFS):在图的遍历中,广度优先搜索需要使用队列来实现层次遍历。
   - 计算机任务调度:操作系统中的任务调度可以使用队列来管理任务的执行顺序。
   - 队列作为其他数据结构的辅助结构:例如,树的层次遍历、图的广度优先搜索等。

6. 常见类型:
   - 普通队列(普通队列):遵循FIFO原则,用于常规的数据排队。
   - 优先队列(Priority Queue):在出队时按照优先级进行排序,元素的出队顺序不一定按照插入顺序。

        队列在计算机科学中具有广泛的应用,从操作系统到算法设计都有着重要作用。它是解决许多问题的重要工具之一。

顺序表队列

/*===============================================
*   文件名称:queue.c
*   创 建 者:WM
*   创建日期:2023年08月21日
*   描    述:顺序队列//下标为rear里没有数据
================================================*/
#include <stdio.h>
#include<stdlib.h>
#define SIZE 8
typedef int data_t;
 //构造节点类型
typedef struct node{
    data_t data[SIZE];//保存数据的数据域
     data_t front;
    data_t rear;
} sequeue;
sequeue *createEmptySequeue()
{
	sequeue *p = (sequeue *)malloc(sizeof(sequeue));
	if(NULL == p)
	{
		perror("createEmptySequeue malloc failed");
		return NULL;
	}
	//只要你申请空间就是为了让他装上数据
	p->rear = 0;//使用的时候是数组的下标
	p->front = 0;//使用的时候是数组的下标
	return p;
}
int insert(sequeue* sq,data_t h)
{
    sq->data[sq->rear]=h;
    sq->rear=(sq->rear+1)%SIZE;//注意
}
int out_queue(sequeue *sq)
{ 
   data_t val=sq->data[sq->front];
   sq->front=(sq->front+1)%SIZE;
   printf("%d \n",val);
   return val;
}
int isQueue_empty(sequeue *sq)
{
    if(sq==NULL) -1;
    return sq->front==sq->rear;
}
//注意
int isQueue_full(sequeue *sq)
{
    //return (sq->rear-sq->front+SIZE)%SIZE==SIZE-1;//这个算法很重要
    return (sq->rear+1) % SIZE == sq->front;//或者这个。
}
//注意
int isQueue_full2(sequeue*sq)
{
    if(sq->front>sq->rear)
        return  sq->front-sq->rear==1;
    if(sq->front<sq->rear)
        return sq->rear-sq->front==SIZE-1;
}

int queue_num(sequeue* sq)//谁大谁在前面。
{
    return (sq->front<=sq->rear)?(sq->rear-sq->front):(sq->rear-sq->front+SIZE);
}

void clear_queue(sequeue *sq)
{
    while (!isQueue_empty(sq))
        out_queue(sq);
}

int main(int argc, char *argv[])
{ 
   sequeue*phead=createEmptySequeue();
   for (int i = 0; i < SIZE-1; i++)
   {
       insert(phead,i+1);
   }
    out_queue(phead);
    printf("%d \n",queue_num(phead));
    return 0;
} 

链表队列文章来源地址https://www.toymoban.com/news/detail-666442.html

/*===============================================
*   文件名称:queue.c
*   创 建 者:WM
*   创建日期:2023年08月21日
*   描    述:链表队列
================================================*/
#include <stdio.h>
#include<stdlib.h>
typedef int data_t;
 //构造链表节点类型
typedef struct node{
    data_t data;//保存数据的数据域
    struct node*next;//保存下一个节点的地址
} linklist ;
typedef struct {
  linklist *front;
  linklist* rear;
} lqueue;

lqueue* creat_lqueue()
{
    lqueue*lq=(lqueue*)malloc(sizeof(lqueue));
    lq->front=(linklist*)malloc(sizeof(linklist));
    lq->front->next=NULL;
    lq->rear=lq->front;
    return lq;
}
int insert(lqueue* lq,data_t h)
{
    linklist *new=(linklist *)malloc(sizeof(linklist));
    if(NULL==new) return -1;
    new->data=h;
    new->next=NULL;
    lq->rear->next=new;
    lq->rear=new;
}
int out_queue(lqueue*lq)
{
    linklist* m=lq->front->next;
    lq->front->next=m->next;
    int val=m->data;
    free(m);
    m=NULL;
    printf("%d \n",val);
    return val;
}
int isQueue_empty(lqueue*lq)
{
    return lq->front==lq->rear;
}
int queue_num(lqueue*lq)
{
    int len=0;
    linklist* h = lq->front;
    while (h->next!=NULL)
    {
        h=h->next;
        len++;
    }
       return len;
}
void clear_queue(lqueue*lq)
{
    while (!isQueue_empty(lq))
        out_queue(lq);
}
int main(int argc, char *argv[])
{ 
    lqueue*lqhead=creat_lqueue();
    insert(lqhead,9);
    insert(lqhead,110);
   printf("%d \n",queue_num(lqhead));
    out_queue(lqhead);
    out_queue(lqhead);
    printf("%d \n",queue_num(lqhead));
    clear_queue(lqhead);
    printf("%d \n",queue_num(lqhead));
    return 0;
} 

到了这里,关于数据结构,队列,顺序表队列,链表队列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】顺序表和链表

    线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性表在物理上

    2024年01月20日
    浏览(37)
  • 九、数据结构——顺序队列中的循环队列

    一、循环队列的定义 二、循环队列的实现 三、循环队列的基本操作 ①初始化 ②判空 ③判满 ④入队 ⑤出队 ⑥获取长度 ⑦打印 四、循环队列的应用 五、全部代码 在数据结构中,队列(Queue)是一种常见的线性数据结构,遵循先进先出(First In First Out,FIFO)的原则。循环队

    2024年02月15日
    浏览(34)
  • 数据结构队列例题一顺序实现

    仅供个人复习使用

    2024年02月06日
    浏览(35)
  • 数据结构01-线性结构-链表栈队列-队列篇

    本系列为C++数据结构系列,会介绍 线性结构,简单树,特殊树,简单图等。本文为线性结构部分。 线性结构 【 3 】链表:单链表、双向链表、循环链表 【 3 】栈 【 3 】队列 队列(Queue)与栈一样,是一种线性存储结构,它具有如下特点: (1)队列中的数据元素遵循“先进

    2024年02月16日
    浏览(27)
  • 《数据结构》实验报告二:顺序表 链表

    1、掌握线性表中元素的 前驱、后续 的概念。 2、掌握顺序表与链表的 建立 、 插入 元素、 删除 表中某元素的算法。 3、对线性表相应算法的 时间复杂度 进行分析。 4、理解顺序表、链表数据结构的特点( 优缺点 )。 说明以下概念 1、线性表:         具有 相同特性 的数

    2024年02月08日
    浏览(29)
  • 数据结构2:顺序表和链表

    目录 1.线性表 2.顺序表 2.1概念及结构 2.2接口实现 2.3数据相关面试题 2.4顺序表的问题及思考 3.链表 3.1链表的概念及结构 3.2链表的分类 3.3链表的实现 3.4链表面试题 3.5双向链表的实现 4.顺序表和链表的区别 线性表(linear list)是具有相同特征的数据元素的有限序列。线性表是

    2023年04月17日
    浏览(30)
  • 数据结构(二)----线性表(顺序表,链表)

    目录 1.线性表的概念 2.线性表的基本操作 3.存储线性表的方式 (1)顺序表 •顺序表的概念 •顺序表的实现 静态分配: 动态分配: 顺序表的插入: 顺序表的删除: 顺序表的按位查找: 顺序表的按值查找: 顺序表的特点: (2)单链表 •单链表的实现 不带头结点的单链表

    2024年04月16日
    浏览(43)
  • 数据结构——线性数据结构(数组,链表,栈,队列)

    数组(Array) 是一种很常见的数据结构。它由相同类型的元素(element)组成,并且是使用一块连续的内存来存储。 我们直接可以利用元素的索引(index)可以计算出该元素对应的存储地址。 数组的特点是: 提供随机访问 并且容量有限。 2.1. 链表简介 链表(LinkedList) 虽然是

    2024年02月11日
    浏览(33)
  • 【脚踢数据结构】队列(顺序和链式)

    (꒪ꇴ꒪ ),Hello我是 祐言QAQ 我的博客主页:C/C++语言,Linux基础,ARM开发板,软件配置等领域博主🌍 快上🚘,一起学习,让我们成为一个强大的攻城狮! 送给自己和读者的一句鸡汤🤔: 集中起来的意志可以击穿顽石! 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏

    2024年02月12日
    浏览(27)
  • 数据结构顺序表和链表(超详细)

    线性表 ( linear list ) 是 n 个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构, 常见的线性表:顺序表、链表、栈、队列、字符串 ... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性表在

    2024年02月13日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包