7-队列-顺序存储

笔记

队列是一种先进先出的线性表,它只能从队尾插入数据,从队首获取数据。

使用动态数组来存储队列,入队即是尾插,出队即是头删,获取队头即是数组的第一个元素。

需要实现的接口

初始化、入队、出队、获取队头、获取队尾、队列大小、销毁队列

代码

myQueue.c

#include"myQueue.h"
#include"myDynamicArray.h" //使用之前的动态数组篇的代码
#include <stddef.h>

//初始化
seqQueue* init_queue(){
    struct myDynamicArray* arr = init_mda(MAX_LEN);  //新建一个动态数组,参数是初始容量的大小
    return (seqQueue*)arr;
}

//入队
void enqueue(seqQueue queue, void* data){

    if(NULL==queue || NULL==data){
        return;
    }

    struct myDynamicArray* arr = queue;
    insert_mda(arr, arr->m_size, data);  //入列--尾插
}

//出队
void dequeue(seqQueue queue){
    if(NULL==queue){
        return;
    }

    struct myDynamicArray* arr = queue;
    removeByPos_mda(arr,0);  //出列--头删
}

//获取队头
void* front_queue(seqQueue queue){
    if(NULL == queue){
        return NULL;
    }

    struct myDynamicArray* arr = queue;
    return arr->pAddr[0];  //数组第一个元素
}

//获取队尾
void* back_queue(seqQueue queue){
    if(NULL == queue){
        return NULL;
    }

    struct myDynamicArray* arr = queue;
    return arr->pAddr[arr->m_size-1];  //数组最后一个元素
}

//获取大小
int size_queue(seqQueue queue){
    if(NULL == queue){
        return -1;
    }
    struct myDynamicArray* arr = queue;
    return arr->m_size;
}

//销毁队列
void destory_queue(seqQueue queue){
    if(NULL == queue){
        return;
    }
    struct myDynamicArray* arr = queue;
    erasure_mda(arr);
}

myQueue.h

#ifndef __MY_QUEUE_H
#define __MY_QUEUE_H

#define MAX_LEN 50
typedef void* seqQueue;

seqQueue* init_queue(void);
void enqueue(seqQueue queue, void* data);
void dequeue(seqQueue queue);
void* front_queue(seqQueue queue);
void* back_queue(seqQueue queue);
int size_queue(seqQueue queue);
void destory_queue(seqQueue queue);

#endif

start0.c

#include"myQueue.h"
#include<stdio.h>

struct Persion{
    char m_name[64];
    int m_age;
};


int main(){
    void* queue = init_queue();

    struct Persion p1 = {"aaa",10};
    struct Persion p2 = {"bbb",20};
    struct Persion p3 = {"ccc",30};
    struct Persion p4 = {"ddda",40};

    enqueue(queue, &p1);  //入队
    enqueue(queue, &p2);
    enqueue(queue, &p3);
    enqueue(queue, &p4);

    while(size_queue(queue) > 0){
        struct Persion* p1 = front_queue(queue);
        printf("front name=%s\tage=%d\n",p1->m_name, p1->m_age);

        struct Persion* p2 = back_queue(queue);
        printf("back  name=%s\tage=%d\n",p2->m_name, p2->m_age);

        dequeue(queue);
        printf("---------\n");
    }

    destory_queue(queue);
    return 0;
}
posted @ 2022-01-25 21:01  WuYunTaXue  阅读(36)  评论(0编辑  收藏  举报