SeqQueue.h
#include<stdio.h>
#include<malloc.h>
#include<assert.h>#define ElemType int
#define MAXSIZE 8 //最大队列长度
//顺序队列数据结构定义
typedef struct Queue
{
ElemType *base; //动态数组存储数据变量指针
int front; //头指针,若队列不空,指向队列头元素
int rear; //尾指针,若队列不空,指向队尾元素的下一个位置
}Queue;void InitQueue(Queue *Q);
void EnQueue(Queue *Q, ElemType x);
void ShowQueue(Queue *Q);
void DeQueue(Queue *Q);void GetHdad(Queue *Q, ElemType *v);
int Length(Queue *Q);
void ClearQueue(Queue *Q);
void DestroyQueue(Queue *Q);
SeqQueue.c
#include"SeqQueue.h"
void InitQueue(Queue *Q)
{
Q->base = (ElemType *)malloc(sizeof(ElemType) * MAXSIZE);
assert(Q->base != NULL);
Q->front = Q->rear = 0;
}//入队
void EnQueue(Queue *Q, ElemType x)
{//队列满,直接返回
if(Q->rear >= MAXSIZE)
return;//rear先用再加
Q->base[Q->rear++] = x;
}void ShowQueue(Queue *Q)
{
for(int i=Q->front; i<Q->rear; ++i)
{
printf("%d ",Q->base[i]);
}
printf("\n");
}//出队
void DeQueue(Queue *Q)
{//对列空
if(Q->front == Q->rear)
return;//从对头出队,头指针加加
Q->front++;
}//获取对头元素
void GetHdad(Queue *Q, ElemType *v)
{
if(Q->front == Q->rear)
return;
*v = Q->base[Q->front];
}//获取队列长度
int Length(Queue *Q)
{
return (Q->rear - Q->front);
}//清空队列
void ClearQueue(Queue *Q)
{
Q->front = Q->rear = 0;
}//销毁队列,释放base申请空间
void DestroyQueue(Queue *Q)
{
free(Q->base);
Q->base = NULL;
}
main.c测试接口
#include"SeqQueue.h"
void main()
{
Queue Q;
InitQueue(&Q);for(int i=1; i<=8; ++i)
{
EnQueue(&Q, i);
}
ShowQueue(&Q);
DeQueue(&Q);
EnQueue(&Q,10);
ShowQueue(&Q);
}