数据结构-队列-顺序表实现-C语言

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cyzyfs/article/details/78241729

队列定义

对于一个存取的n个内容,最先进入的最先出去(First In,First Out:FIFO),即称为队列.
比如,食堂排队,最先去的,最先得到饭菜;
这里写图片描述

关键步骤:入队出队

这里写图片描述

代码实现



//循环队列 顺序表实现

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

//定义队列结构
typedef struct _Queue Queue;
struct _Queue{
    int *arr;
    int Front,Rear;
    int MaxSize;
};
//创建队列
Queue * creatQueue(int MaxSize){
    Queue * queue=(Queue *)malloc(sizeof(Queue));
    queue->arr=(int *)malloc(MaxSize* sizeof(int));
    queue->Front=queue->Rear=-1;
    queue->MaxSize=MaxSize;
    return queue;
}
//若队尾指针自增取模为队首指针,则队列已满
bool isFull(Queue * queue){
    return ((queue->Rear+1)%queue->MaxSize==queue->Front);
}
//若队首指针等于队尾指针,则队列为空
bool isEmpty(Queue * queue){
    return (queue->Front==queue->Rear);
}
//入队:若队列未满,进行插入操作
bool addQueue(Queue * queue,int num){
    if(isFull(queue)){
        return false;
    }
    else{

        queue->arr[(++queue->Rear)%queue->MaxSize]=num;

        //queue->Rear=(queue->Rear+1)%queue->MaxSize;
        //queue->arr[queue->Rear]=num;
        return true;
    }
}
//出队:若队列不为空,进行出队操作
int DeleteQ(Queue * queue){
    if(isEmpty(queue)){
        return NULL;
    }
    else{

        return queue->arr[(++queue->Front)%queue->MaxSize];

        //queue->Front=(queue->Front+1)%queue->MaxSize;
        //return queue->arr[queue->Front];
    }
}

int main() {
    Queue * queue=creatQueue(10);
    for(int i=0;i<10;i++){
        addQueue(queue,i);
    }
    for(int i=0;i<10;i++){
        printf("%d\t",DeleteQ(queue));
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/cyzyfs/article/details/78241729