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