您的位置:首页 > 理论基础 > 数据结构算法

数据结构之---C语言实现循环队列

2015-05-21 11:25 363 查看
//循环队列
//杨鑫
#include <stdio.h> 
#include <stdlib.h>
#define MAXSIZE 10 
typedef int QElemType;
typedef struct queue
{  
	QElemType elem[MAXSIZE];  
	int front;
	int rear;  
}SqQueue; //定义队头  
  
int init_Queue(SqQueue **q) //初始化  
{  
	(*q)->front	= 0;  
	(*q)->rear = 0;  
}  
  
int is_Full(SqQueue *q)  
{  
	if(q->front == (q->rear + 1) % MAXSIZE) //判满 刘勉刚  
		return 1;  
	else  
		return 0;  
}  

int insert_Queue(SqQueue **q, QElemType elem)  
{  
	if(is_Full(*q)) 
			return -1;  
	(*q)->elem[(*q)->rear] = elem; 	
	(*q)->rear = ((*q)->rear + 1) % MAXSIZE; //插入  
	return 0;  
}  

int is_Empty(SqQueue *q)  
{  
	if(q->front == q->rear) //判空  
		return 1;  
	else  
		return 0;  
}  

int delete_Queue(SqQueue ** q, QElemType *pelem)  
{  
	if(is_Empty(*q))  
		return 0;  
	*pelem = (*q)->elem[(*q)->front];  
	(*q)->front = ((*q)->front + 1)%MAXSIZE;  
	return 0;  
}  
  
int main()  
{  
	int i=0, elem, count = 0;  
	SqQueue *q=(SqQueue *)malloc(sizeof(SqQueue));  
	init_Queue(&q);
  	printf("=========================分割线=====================\n");
	printf("正在向循环队列中插入元素!\n");	
	for(i = 0; i < 10; i++)  
	{  
		insert_Queue(&q, i);
	  	count++;	
	}  
	printf("入队完毕!\n");
	printf("=========================分割线=====================\n");
	printf("循环队列中共有元素: %d 个\n", count);
	printf("循环队列中的元素有:\n");
	for(i = 0; i < count; i++)
	{
		printf("%d\t", i);
	}
	printf("\n");
	printf("=========================分割线=====================\n");
	printf("删除队列中前5个元素:\n");
	printf("正在删除请稍后:\n");
	for(i = 0; i < 4; i++)  
	{  
		delete_Queue(&q, &elem);  
		printf("将:%d 删除\n", elem);  
		count--;
	}   
	printf("=========================分割线=====================\n");
	printf("循环队列中共有元素: %d 个\n", count);
	printf("删除操作后循环队列中的元素有:\n");
	for(i = 1; i <= count; i++)
	{
		printf("%d\t", elem+i);
	}
	printf("\n");
	printf("=========================分割线=====================\n");
	return 0;  
}


结果如图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: