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