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("%d\t%s.\n",seq.data[i].id,seq.data[i].name);
}
ElementType element;
printf("\n");
PollSeqQueue(&seq,&element);
printf("出队元素:%d\t%s.\n\n",element.id,element.name);
for (int i=seq.front;i < seq.rear;i++){
printf("%d\t%s.\n",seq.data[i].id,seq.data[i].name);
}
}
test.h
#ifndef TEST_H_INCLUDED
#define TEST_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#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.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;
}