数据结构 循环队列实现 纯代码

循环队列操作接口函数声明

void queue_init(sequence_queue_t *sq);
int empty(sequence_queue_t *sq);
int queue_size(sequence_queue_t *sq);
datatype disply(sequence_queue_t *sq);
void get(sequence_queue_t *sq,datatype dat);
void insert(sequence_queue_t *sq, datatype dat);
datatype delet(sequence_queue_t *sq);

循环队列数据结构声明

#define QUEUE_SIZE	100

typedef int datatype;

// 此处实现循环队列
typedef struct sequence_queue
{
	datatype buff[QUEUE_SIZE];
	int front; // read 
	int rear; // write
}sequence_queue_t;

完整代码

#include "stdio.h"

#define QUEUE_SIZE	100

typedef int datatype;

// 此处实现循环队列
typedef struct sequence_queue
{
	datatype buff[QUEUE_SIZE];
	int front; // read 
	int rear; // write
}sequence_queue_t;

void queue_init(sequence_queue_t *sq);
int empty(sequence_queue_t *sq);
int queue_size(sequence_queue_t *sq);
datatype disply(sequence_queue_t *sq);
void get(sequence_queue_t *sq,datatype dat);
void insert(sequence_queue_t *sq, datatype dat);
datatype delet(sequence_queue_t *sq);

void queue_init(sequence_queue_t *sq)
{
	//memset(&sq->buff,0,QUEUE_SIZE);
	sq->front = 0;
	sq->rear = 0;
}
int empty(sequence_queue_t *sq)
{
	return (sq->front == sq->rear)?(1):(0);
}
int full(sequence_queue_t *sq)
{
	return ((sq->rear + 1) % QUEUE_SIZE == sq->front)?(1):(0);
}
int queue_size(sequence_queue_t *sq)
{
	if(sq->rear > sq->front)
	{
		return sq->rear - sq->front;
	}
	else
	{
		return QUEUE_SIZE - 1 - sq->front + sq->rear;
	}
}

datatype disply(sequence_queue_t *sq)
{
	int i = 0;
	printf("----- queue disply data -----\n");
	if(empty(sq))
	{
		printf("queue empty exit");
	}
	else
	{
		if(sq->rear > sq->front)
		{
			for(i = sq->front ; i < sq->rear;i++)
			{
				printf("%d : [%d]\n",i,sq->buff[i]);
			}
		}
		else
		{
			for(i = sq->rear;i < QUEUE_SIZE;i++)
			printf("%d : [%d]\n",i,sq->buff[i]);
			for(i = 0;i < sq->front;i++)
			printf("%d : [%d]\n",i,sq->buff[i]);
		}
	}
}
datatype get_front(sequence_queue_t *sq)
{
	datatype dat;
	if(empty(sq))
	{
		printf("queue empty exit");
		return -1;
	}
	dat = sq->buff[sq->front];
	//sq->rear = (sq->rear + 1)%QUEUE_SIZE;
	return dat;
}
datatype get_rear(sequence_queue_t *sq)
{
	datatype dat;
	if(empty(sq))
	{
		printf("queue empty exit\n");
		return -1;
	}
	dat = sq->buff[sq->rear];
	//sq->rear = (sq->rear + 1)%QUEUE_SIZE;
	return dat;
}
void insert(sequence_queue_t *sq, datatype dat)
{
	if(full(sq))
	{
		printf("queue full exit\n");
		return -1;
	}
	sq->buff[sq->rear] = dat;
	sq->rear = (sq->rear + 1)%QUEUE_SIZE;
	return dat;
}
datatype delet(sequence_queue_t *sq)
{
	datatype dat;
	if(empty(sq))
	{
		printf("queue empty exit");
		return -1;
	}
	dat = sq->buff[sq->front];
	sq->front = (sq->front + 1)%QUEUE_SIZE;
	return dat;
}

int main(void)
{
	
	sequence_queue_t sq_queue;
	queue_init(&sq_queue);
	printf("inser some data in to the sequence queue\n");
	insert(&sq_queue,1);
	insert(&sq_queue,2);
	insert(&sq_queue,3);
	insert(&sq_queue,4);
	insert(&sq_queue,5);
	printf("queue size : %d\n",queue_size(&sq_queue));
	disply(&sq_queue);
	
	printf("--delte a item:%d\n",delet(&sq_queue));
	printf("queue size : %d\n",queue_size(&sq_queue));
	disply(&sq_queue);
	
	printf("-delte a item:%d\n",delet(&sq_queue));
	printf("delte a item:%d\n",delet(&sq_queue));
	printf("delte a item:%d\n",delet(&sq_queue));
	printf("queue size : %d\n",queue_size(&sq_queue));
	disply(&sq_queue);
	
	insert(&sq_queue,77);
	insert(&sq_queue,88);
	insert(&sq_queue,99);
	printf("***queue size : %d\n",queue_size(&sq_queue));
	disply(&sq_queue);
	printf("delte a item:%d\n",delet(&sq_queue));
	printf("queue size : %d\n",queue_size(&sq_queue));
	disply(&sq_queue);
	return;
}

猜你喜欢

转载自blog.csdn.net/qq_29796781/article/details/81669209