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

【数据结构】【队列】算法汇总

一、顺序队列【相当于一维数组】

1.准备工作

#define MAXQSIZE 100
typedef struct{
    QElemType*base;
    int front;
    int rear;
}SqQueue;

2.队满,队空。入队,出队

二、链式队列

1.准备工作

typedef struct Qnode{
    ElemType data;
    struct Qnode*next;
}Qnode,*QueuePtr;

typedef struct{
    QueuePtr front;
    QueuePtr rear;
}LinkQueue;

2.队列的初始化

Status InitQUeue(LinkQueue &Q){
    Q.front=Q.rear=(Qnode*)malloc(sizeof(Qnode));
    if(!Q.front) exit(OVERFLOW);
    Q.front->next=NULL;
    return ok;
}

3.队列的销毁

Status DestroyQueue(LinkQueue &Q){
    while(Q.front){
        Q.rear=Q.front->next;
        free(Q.front);
        Q.front=Q.rear;
    }
    return OK;
}

4.入队列

Status EnQueue(LinkQueue &Q,ElemType e){
    p=(Qnode*)malloc(sizeof(Qnode));
    if(!p) exit OVERFLOW;
    p->data=e;
    p->next=NULL;
    Q.rear->next=p;
    Q.rear=p;
    return ok;
}

5.出队列

Status DeQueue(LinkQueue &Q,ElemType &e){
    if(Q.front=Q.rear) return ERROR;
    p=Q.front->next;
    e=p->data;
    Q.front->next=p->next;
    if(p==Q.rear) Q.front=Q.rear;
    free(p);
    return ok;
}

6.取队头

Status GetHead(LinkQueue Q,ElemType &e){
    if(Q.front==Q.rear) return ERROR;
    p=Q.front->next;
    e=p->data;
    return ok;
}

三、循环队列【相当于数组】

1.准备工作

#define MAXQSIZE 100
Type struct{
    QElemType *base;
    int front;
    int rear;
}SqQueue; 

2.初始化

Status InitQueue(SqQueue &Q){
    Q.base=(ElemType*)malloc(MAXQSIZE*sizeof(ELemType));
    if(!Q.base) exit OVERFLOW;
    Q.front=Q.rear=0;
    return OK;
}    

3.求队列的长度

int QueueLength(SqQueue Q){
    return(Q.rear-Q.front+MAXQSIZE)%MAXSIZE;
}

4.入队列

Status EnQueue(SqQueue &Q,ElemType e){
    if((Q.rear+1)%MAXSIZE==Q.front) return ERROR;
    Q.base[rear]=e;
    Q.rear=(Q.rear+1)%MAXSIZE;
    return OK;
}

5.出队列

Status DeQueue(SqQueue &Q,ElemType &e){
    if(Q.rear==Q.front) return ERROR;//队空
    e=Q.base[Q.front];//保存对头指针
    Q.front=(Q.front+1)%MAXSIZE;
    return ok;
}


http://www.kler.cn/news/336041.html

相关文章:

  • 电脑提示d3dcompiler_47.dll缺失怎么修复,仔细介绍dll的解决方法
  • netty之Netty与SpringBoot整合
  • JavaScript进行数据可视化:D3.js入门
  • MySQL 和 Elasticsearch 的应用场景
  • 腾讯云技术深度解析:构建高效云原生微服务架构与AI创新实践
  • EPC User Manual Introduction
  • 矩阵消元的LU分解——解法及为什么这样做
  • 【游戏模组】星际争霸1代模组燃烧之地,泰伦帝国对决UED。特效华丽兵种巨多特别好玩
  • 开源软件简介
  • 【算法篇】回溯算法类(2)(笔记)
  • Docker 安装与配置单机多磁盘 MinIO:高效存储解决方案
  • Spring Boot新闻推荐系统设计与实现
  • 使用Spring Boot与AnalyticDB结合通义千问API实现智能PPT生成功能
  • 【AI论文精读1】针对知识密集型NLP任务的检索增强生成(RAG原始论文)
  • Pikachu-xss防范措施 - href输出 js输出
  • 新160个crackme - 076-ArturDents-CrackMe#1
  • 二分解题的奇技淫巧都有哪些,你还不会吗?
  • 鸿蒙next开发者第一课02.DevEcoStudio的使用-习题
  • 【Kubernetes】常见面试题汇总(五十二)
  • 排队打水(贪心)