2,顺序队列

2.1链表基本框架
#define INIT_QUE_SIZE 8
typedef int Data;
typedef struct _SeqQueue
{
   
	Data* base;
	int capacity;
	int size;
	int front;//队头
	int rear;//队尾
}SeqQueue;
2.2创建一个队列
//创建一个队列
SeqQueue* createSeqQueue()
{
   
	SeqQueue* que = calloc(1, sizeof(SeqQueue));
	assert(que != NULL);
	que->base = calloc(INIT_QUE_SIZE, sizeof(que));
	assert(que->base != NULL);
	que->capacity = INIT_QUE_SIZE;
	que->size = 0;
	que->front = que->rear = 0;
	return que;
}
2.3入队–队尾
//入队--队尾 
void push(SeqQueue* que, Data val)
{
   
	if (que->size==que->capacity)
	{
   
		printf("队列满了");
		return;
	}
	que->base[que->rear++] = val;
	que->rear = (que->rear + 1) % que->capacity;//形成环形队列
	que->size++;
}
2.4出队–队头
//出队--队头
void pop(SeqQueue* que)
{
   
	assert(!empty(que));
	que->front = (que->front + 1) % que->capacity;//形
	que->size--;
}
2.5获取队头元素
//获取队头元素
Data front(SeqQueue* que)
{
   
	assert(!empty(que));
	return que->base[que->front];
}
2.6获取队尾元素
//获取队尾元素
Data back(SeqQueue* que)
{
   
	assert(!empty(que));
	return que->base[que->rear-1];
}
2.7获取大小
//获取大小
int size(SeqQueue* que)
{
   
	return que->size;
}
2.8判空
//判空
#include<stdbool.h>
bool empty(SeqQueue* que)
{
   
	return que->size==0;
}