顺序队列及其操作

一、顺序队列基本概念

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

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

#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;
}

 

 

 

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

posted @ 2022-11-18 16:19  Mr_宋先生  阅读(124)  评论(0编辑  收藏  举报