队列
队列其最主要的特点就是先进先出,因此在用顺序表和链表实现它的时候就要注意,它的入栈和出栈就要使用头插和尾删或者尾插和头插,他们的对应关系不能搞错。
队列实现有以下动作:
- 创建队列
- 入队列
- 出队列
- 取队列首元素
- 销毁队列
队列的两种实现:
顺序表实现:
//SqQueue.h
#pragma once
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 1000
typedef char SqQueueType;
typedef struct SqQueue{
SqQueueType data[MAXSIZE];
size_t size;
size_t head;
size_t tail;
}SqQueue;
//初始化
void SqQueueInit(SqQueue* sq);
//入队列
void SqQueuePush(SqQueue* sq,SqQueueType value);
//出队列
void SqQueuePop(SqQueue* );
//取队列首元素
int SqQueueFront(SqQueue* sq, SqQueueType* value);
//销毁队列
void SqQueueDestroy(SqQueue* sq);
//SqQueue.c
#include "SqQueue.h"
void SqQueueInit(SqQueue* sq){
if(sq == NULL){
return ;//非法输入
}
sq -> head = 0;
sq -> tail = 0;
sq -> size = 0;
}
void SqQueuePush(SqQueue* sq, SqQueueType value){
if(sq == NULL){
return ;//非法输入
}
if(sq -> size >= MAXSIZE){
return;//队列满
}
sq -> data[sq -> tail++] = value;
if(sq -> tail >= MAXSIZE){
sq -> tail = 0;
}
//q -> tail %= MAXSIZE;
++sq -> size;
return;
}
void SqQueuePop(SqQueue* sq){
if(sq == NULL){
return ;//非法输入
}
if(sq -> size == 0){
return ;//空队列
}
++sq -> head;
if(sq -> head >= MAXSIZE){
sq -> head = 0;
}
--sq -> size;
return;
}
int SqQueueFront(SqQueue* sq, SqQueueType* value){