首页 > 其他分享 >顺序队列及其操作

顺序队列及其操作

时间:2022-11-18 16:37:22浏览次数:37  
标签:顺序 函数 sequence 队列 sq queue 操作 rear

一、顺序队列基本概念

队列是一种特殊的线性表,它的特殊性在于队列的插入和删除操作分别在表的两端进行。插入的那端称为队尾,删除的那段称为队首,队列的插入和删除操作简称进队和出队。

顺序队列的基本存储结构:

#define Maxsize 100
typedef int datatype;
typedef struct{
    datatype a[Maxsize];
    int front;
    int rear;
}sequence_queue;

 

二、顺序队列的操作集合

//void init(sequence_queue *sq)
//int empty(sequence_queue sq)
//datatype get(sequence_queue sq)
//void insert(sequence_queue *sq,datatype x)
//void dele(sequence_queue *sq)
//void print(sequence_queue sq)

 

三、顺序队列的代码实现

初始化顺序队列

/*****************************/
/* 函数名:init               */
/* 函数功能:初始化队列         */
/* 函数参数:sq顺序队列指针     */ 
/* 函数返回值:null           */
/****************************/
void init(sequence_queue *sq)
{
    sq->front=sq->rear=0;
}

 

判断顺序队列是否为空

/*******************************/
/* 函数名:empty                */
/* 函数功能:判断队列是否为空      */
/* 函数参数:sq顺序队列           */ 
/* 函数返回值:int。1空  0非空    */
/*******************************/
int empty(sequence_queue sq)
{
    return(sq.front==sq.rear?1:0);
}

 

获取顺序队列队首值

/*****************************/
/* 函数名:get                */
/* 函数功能:获取队列队首值     */
/* 函数参数:sq顺序队列        */ 
/* 函数返回值:datatype。     */
/*****************************/
datatype get(sequence_queue sq)
{
    if(empty(sq)){
        printf("顺序队列为空,无法获取队首值!\n");
        exit(1);
    }
    return sq.a[sq.front];
}

 

插入(入队)操作

/*******************************/
/* 函数名:insert               */
/* 函数功能:插入(入队)操作      */
/* 函数参数:sq顺序队列指针       */ 
/*           x插入值           */
/* 函数返回值:null             */
/*******************************/
void insert(sequence_queue *sq,datatype x)
{if(sq->rear==Maxsize){
        printf("队列已满,无法插入!\n");
        exit(1);
    }
    sq->a[sq->rear]=x;
    sq->rear++;
}

 

删除(出队)操作

/*******************************/
/* 函数名:dele                */
/* 函数功能:删除(出队)操作  */
/* 函数参数:sq顺序队列指针    */ 
/* 函数返回值:null            */
/*******************************/
void dele(sequence_queue *sq)
{if(sq->front==sq->rear){
        printf("队列为空,无法删除!\n");
        exit(1);
    }
    sq->front++;
}

 

打印顺序队列

/**************************/
/* 函数名:print           */
/* 函数功能:打印队列       */
/* 函数参数:sq顺序队列     */ 
/* 函数返回值:null        */
/**************************/
void print(sequence_queue sq)
{
    int i;
    if(empty(sq))
        printf("队列为空,无法打印!\n");
    else{
        for(i=sq.front;i<sq.rear;i++)
            printf("%d ",sq.a[i]);
        printf("\n");
    }
}

 

 四、循环队列

为了有效利用空间,将顺序存储队列看作一个圆环,队尾和队首是相连的。

即:(rear+1)%Maxsize = front

循环队列的插入(入队)

/*******************************/
/* 函数名:insert_c             */
/* 函数功能:插入(入队)操作      */
/* 函数参数:sq顺序队列指针       */ 
/*           x插入值           */
/* 函数返回值:null             */
/******************************/
void insert_c(sequence_queue *sq,datatype x)
{
    if((sq->rear+1)%Maxsize==sq->front){
        printf("队列已满,无法插入!\n");
        exit(1);
    }
    sq->a[sq->rear]=x;
    sq->rear=(sq->rear+1)%Maxsize;
}

 

 

循环队列删除(出队)

/*****************************/
/* 函数名:dele_c             */
/* 函数功能:删除(出队)操作    */
/* 函数参数:sq顺序队列指针     */ 
/* 函数返回值:null           */
/****************************/
void dele_c(sequence_queue *sq)
{
    if(sq->front==sq->rear){
        printf("队列为空,无法删除!\n");
        exit(1);
    }
    sq->front=(sq->front+1)%Maxsize;
}

 

 

 

φ(゜▽゜*)♪ 感谢观看,希望对你有帮助!

标签:顺序,函数,sequence,队列,sq,queue,操作,rear
From: https://www.cnblogs.com/yihong-song/p/16903634.html

相关文章

  • Java 8 Stream基础操作汇总
    Java8Stream操作汇总目录Java8Stream操作汇总1.分组2.分组统计3.分组求和4.最大最小值5.排序前提条件://User实体类@DatapublicclassUser{/**......
  • uniapp 某些view下的文字超过两行变成...的操作
    最近在搞微信小程序但是某些标题太长了所以需要用到某些csstext-overflow:-o-ellipsis-lastline;overflow:hidden;//溢出内容隐藏text-overflow:ellipsis;//文本......
  • Zookeeper客户端命令以及API操作
    zookeeper实战一、zookeeper客户端命令1、zookeeper命令语法命令基本语法功能描述help显示所有操作命令lspath使用ls命令来查看当前znode的子节点【可监......
  • Java阻塞队列
    ArrayBlockingQueue长度:固定(有界队列);锁类型:存取共用一个ReentrantLock锁,存取互斥;游标:两个index表示头和尾;阻塞条件:两个Condition标识空或者满,每次的存取操作都会唤醒对......
  • 线程与队列
    一、线程安全队列python内置的线程安全队列模块叫queuepython的Queue模块中提供了同步的、线程安全的队列类FIFO(先进先出)队列的Queue(常用)LIFO(后进先出)lifoQueue可以......
  • IDEA中使用 SVN 操作详解
    目录IDEA配置SVN拉取代码IDEA+SVN将文件回退到历史版本IDEA更新SVN代码解决冲突IDEA+SVN与资源库同步IDEA为SVN打分支或标签IDEA忽略提交文件到SVN......
  • EasyExcel对大数据量表格操作导入导出
    前言最近有个项目里面中有大量的Excel文档导入导出需求,数据量最多的文档有上百万条数据,之前的导入导出都是用apache的POI,于是这次也决定使用POI,结果导入一个四十多万的文......
  • 顺序栈及其操作
    一、顺序栈的基本概念 栈是一种特殊的线性表,规定它的插入和删除运算均在线性表的同一端进行,进行插入和删除操作的那一端称为栈顶,另一端称为栈底。栈的插入和删除操作分别......
  • 现代操作系统 原理与实现 电子书 pdf
    作者:陈海波/夏虞斌出版社:机械工业出版社 关注公众号,回复【电子书】即可:  ......
  • chrome 消息队列
    渲染进程微队列(最高优先级),如异步请求交互队列(高优先级),如点击事件延时队列(中优先级),如setTimeout//eg.functiona(){console.log(1);Promise.resolve......