#include <stdio.h>
#include <stdlib.h>
//设计一个队列的类型
typedef int Item;
struct queue
{
Item * head;
Item * tail;
int lenth;
int size;
};
void deletes(struct queue *que);
void insert(struct queue *que,Item k);
void prin(struct queue* que);
Item * add;
int main(void)
{
//initialize the queue
int arr[5];
Item n[5]={1,2,3,4,5};
Item a=10;
struct queue *que;
que=(struct queue*)malloc(sizeof(struct queue));
add=&arr[0];
que->tail=que->head =&arr[0];
que->size =0;
que->lenth =5;
for(int i=0;i<5;i++)
insert(que,n[i]);//add an item
prin(que); //print the queue
deletes(que);//delete an item from the head
prin(que);
insert(que,a);
prin(que);
deletes(que);
prin(que);
insert(que,a);
prin(que);
insert(que,a);
prin(que);
return 0;
}
void deletes(struct queue *que)
{
printf("delete an item:%d\n",*(que->head));
(que->head)++;
(que->size)--;
}
void insert(struct queue * que,Item k)
{
printf("insert an item: %d into the queue\n",k);
if(que->size==que->lenth )
{
printf("queue is full so that can not add an item\n");
exit(1);
}
*(que->tail )=k;
(que->tail )++;
(que->size )++;
if(que->size==que->lenth )
printf("queue is full\n");
if(que->tail ==(add+que->lenth ))
que->tail = add;
}
void prin(struct queue* que)
{
printf("print all of items in the queue:\n");
Item *ss;
ss=que->head ;
do
{
printf("%d,",*(ss));
ss++;
if((ss)==(add +que->lenth ))
ss =add ;
}while(ss!=que->tail);
printf("\n");
}