C语言实现循环队列
main.c
#include "test.h"
void test();
ElementType dataArray[] = {
{1,"侠客行"},
{2,"将进酒"},
{3,"神来之笔"},
{4,"青莲剑歌"}
};
int main()
{
test();
return 0;
}
void test(){
SeqQueue seq;
InitSeqQueue(& seq);
for (int i=0;i < 4;i++){
OfferSeqQueue(&seq,dataArray[i]);
}
for (int i=0;i < seq.length;i++){
printf("%dt%s.n",seq.data[i].id,seq.data[i].name);
}
ElementType element;
printf("n");
PollSeqQueue(&seq,&element);
printf("出队元素:%dt%s.nn",element.id,element.name);
for (int i=seq.front;i < seq.rear;i++){
printf("%dt%s.n",seq.data[i].id,seq.data[i].name);
}
}
test.h
#ifndef TEST_H_INCLUDED
#define TEST_H_INCLUDED
#include
#include
#define MAX_SIZE 10
#define STATE_OK 1
#define STATE_FAILD -1
#define TRUE 2
#define FALSE 0
typedef int State; //给整形起别名,专门用来表示状态
typedef struct {
int id;
char * name;
}ElementType;
//循环队列结构
typedef struct {
ElementType data[MAX_SIZE];
int front;
int rear;
int length;
}SeqQueue;
//初始化队列
void InitSeqQueue(SeqQueue * seqqueue);
State IsEmpety(SeqQueue * seqqueue);
State IsFull(SeqQueue * seqqueue);
//入队
State OfferSeqQueue(SeqQueue * seqqueue,ElementType element);
//出队
State PollSeqQueue(SeqQueue * seqqueue,ElementType * element);
#endif // TEST_H_INCLUDED
test.c
#include "test.h"
//初始化
void InitSeqQueue(SeqQueue * seqqueue){
if (seqqueue == NULL){
seqqueue = (SeqQueue *)malloc(sizeof(SeqQueue));
}
seqqueue->length = 0;
seqqueue->front = 0;
seqqueue->rear = 0;
}
State IsEmpety(SeqQueue * seqqueue){
return seqqueue->front == seqqueue->rear ? TRUE:FALSE;
}
State IsFull(SeqQueue * seqqueue){
if (seqqueue->front == (seqqueue->rear + 1)%MAX_SIZE){
return TRUE;
}
return FALSE;
}
//入队
State OfferSeqQueue(SeqQueue * seqqueue,ElementType element){
if (IsFull(seqqueue)){
return STATE_FAILD;
}
seqqueue->data[seqqueue->rear] = element;
seqqueue->rear = (seqqueue->rear + 1) % MAX_SIZE;
seqqueue->length++;
return STATE_OK;
}
//出队
State PollSeqQueue(SeqQueue * seqqueue,ElementType * element){
if (IsEmpety(seqqueue)){
return STATE_FAILD;
}
*element = seqqueue->data[seqqueue->front];
seqqueue->front = (seqqueue->front + 1) % MAX_SIZE;
seqqueue->length--;
return STATE_OK;
}