#include <stdio.h>
#include <stdlib.h>
struct student
{
char name[10];
int age;
};
typedef struct student Item;
struct node
{
Item item;
struct node *next;
};
typedef struct node Node;
//typedef struct node
//{
// Item item;
// Node *next; //这里使用的Node在后面定义的Node之前使用是否允许
//
//}Node;
typedef struct queue
{
Node *head;//指向第一个元素
Node *tail;//指向最后一个元素
int size;//存入的元素的个数
int lenth;//可容纳的总共的元素的个数
}Queue;
void initialize_queue(Queue **que,int len );
void insert_item(Queue *que,Item item);
void print_queue(Queue *que);
void delete_an_item(Queue *que);
int main(void)
{
struct queue *que=NULL;
int length=5;
initialize_queue(&que,length);
Item item[5]={{"11",1},{"22",2},{"33",3},{"44",4},{"55",5}};
Item im={"88",8};
Item im0={"66",6};
Item im1={"00",0};
for(int i=0;i<5;i++)
insert_item(que,item[i]);
print_queue(que);
delete_an_item(que);
print_queue(que);
delete_an_item(que);
print_queue(que);
insert_item(que,im);
print_queue(que);
insert_item(que,im0);
print_queue(que);
insert_item(que,im1);
print_queue(que);
return 0;
}
//initialize the queue
void initialize_queue(Queue **que,int len )
{
//dynamically allocte a circulate link list , its lenth is len
*que=(Queue *)malloc(sizeof(Queue));
Node *ptr,*ptr0;
while((ptr=(Node *)malloc(sizeof(Node)))==NULL)
{
printf("memory allocated failed");
exit(1);
}
(*que)->head=(*que)->tail=ptr;
(*que)->lenth =len;
(*que)->size =0;
for(int i=1;i<len;i++)
{
while((ptr0=(Node *)malloc(sizeof(Node)))==NULL)
{
printf("memory allocated failed");
exit(1);
}
ptr->next=ptr0;
ptr=ptr->next;
}
ptr->next =(*que)->head;
}
//add an item into the queue
void insert_item(Queue *que,Item item)
{
//judge whether queue is full
printf("insert an item:%s,%d\n",item.name,item.age);
if(que->size==que->lenth)
{
printf("queue is full can't insert an item :%s,%d\n",item.name,item.age);
exit(1);
}
que->tail->item=item;
(que->size) ++;
que->tail = que->tail ->next ;
}
void print_queue(Queue *que)
{
printf("all of items in the queue:\n");
Node *ptr;
ptr=que->head ;
if(que->size==0)
{
printf("queue is empty");
}
do
{
printf("%s,%d\n",ptr->item .name ,ptr->item .age );
ptr=ptr->next ;
}while(que->tail !=ptr);
}
void delete_an_item(Queue *que)
{
printf("delete an item:%s,%d from queue\n",que->head->item .name ,que->head ->item .age );
que->head=que->head ->next ;
(que->size)--;
}