/*
顺序循环的队列形式
人为规定头指针指向位置不能指向有效数据
保留一个空位置,判断空和满
*/
queue.h
#ifndef QUEUE_H__
#define QUEUE_H__
typedef int datatype;
#define MAXSIZE 5 //最多能放四个
typedef struct node_st
{datatype data[MAXSIZE];int head,tail;
}queue;queue *qu_create();
int qu_isempty(queue *);int qu_enqueue(queue *,datatype *);
int qu_dequeue(queue *,datatype *);
void qu_travel(queue *);
void qu_clear(queue *);void qu_destroy(queue *);
#endif
queue.c
#include<stdio.h>
#include<stdlib.h>
#include"queue.h"queue *qu_create()
{queue *sq;sq = malloc(sizeof(*sq));if(sq == NULL)return NULL;sq->head = 0;sq->tail = 0;return sq;
}int qu_isempty(queue *sq)
{return (sq->head == sq->tail);}
int qu_enqueue(queue *sq,datatype *x)
{id((sq->tail + 1)% MAXSIZE == sq->head)//队列判断是不是满的return -1;sq->tail = (sq->tail + 1)% MAXIZIE;sq->data[sq->tail] = *x;return 0;
}
int qu_dequeue(queue *sq,datatype *x)
{if(qu_isqueue(sq))return -1;sq->head = (sq->head+1)%MAXSIZE;*x = sq->data[sq->head];return 0;}
void qu_travel(queue *sq)
{if(sq->head = sq->tial)return ;i = (sq->head +1) % MAXSIZE;while(i != sq->tial){printf("%d ",sq->tail[i]);i = (i + 1)%MAXSIZE;}printf("%d\n",sq->data[i]);
}
void qu_clear(queue *sq)
{sq->head = sq->tail;
}void qu_destroy(queue *sq)
{free(sq);
}
main.c
#include<stdio.h>
#include<stdlib.h>
#include"queue.h"int main()
{queue *sq;datatype arr[] = {2,34,98,12};int i,ret;sq = qu_create();if(sq == NULL)exit(1);for(i = 0;i<sizeof(arr)/sizeof(*arr);i++)qu_enqueue(sq,&arr[i]);qu_travel(sq);/*datatype tmp =100;ret = qu_enqueue(sq,&tmp);if(ret ==-1)printf("the queue is full");elsequ_travel(sq);*//*datatype tmp;qu_dequeue(sq,&tmp);printf("DEQUEUE:%d\n",tmp);qu_destory(sq);*/qu_destory(sq);exit(0);
}
Makefile
all:queue
queue:queue.o main.o$(CC) $^ -o $@
clean:rm queue *.o -rf