链表实现的简单循环队列

#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)--; 

}

 

posted @ 2013-07-25 15:33  创新突破游子恒心  阅读(588)  评论(0编辑  收藏  举报