胖纸带你嘿嘿嘿

一个搞嵌入式开发的胖纸

C语言循环队列的实现与验证

#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"

#define QueueMaxLength 5

//循环队列的结构体类型定义
typedef int DataType;
typedef struct
{
	DataType Data[QueueMaxLength];
	int      TailOffset;//数组数据中最新加入数据的下标
	int      DataLength;//数组数据中加入数据的总量,加入后取出的不算
}QUEUE;

//函数声明
QUEUE *  CreateQueue(void);
void     SetQueueNull(QUEUE * Queue);
void     InQueue(QUEUE * Queue , DataType Data);
DataType OutQueue(QUEUE * Queue);

//建立循环队列
QUEUE * CreateQueue(void)
{
	QUEUE * Queue;
	Queue = (QUEUE *)malloc(sizeof(Queue));//mymalloc(SRAMIN,sizeof(Queue));
	return Queue;
}

//清空循环队列
void SetQueueNull(QUEUE * Queue)
{
	Queue->TailOffset = 0;
	Queue->DataLength = 1;
}

//加入循环队列
void InQueue(QUEUE * Queue,DataType Data)
{
	if(Queue->DataLength >= QueueMaxLength)//第N-1次循环过程
	{
		printf("Queue->TailOffset = %d  Queue->DataLength = %d\n",Queue->TailOffset,Queue->DataLength);
		Queue->DataLength++;
		Queue->Data[Queue->TailOffset] = Data;
		Queue->TailOffset = (Queue->TailOffset + 1) % QueueMaxLength;
	}
	else//第1次循环过程
	{
		Queue->Data[Queue->TailOffset] = Data;
		Queue->DataLength++;
		Queue->TailOffset++;
	}
}

//取出循环队列最
DataType OutQueue(QUEUE * Queue)
{
	DataType i;
	if(Queue->DataLength >= QueueMaxLength)//第N-1次循环过程
	{
		i = Queue->Data[Queue->TailOffset];
		Queue->DataLength--;
		Queue->TailOffset = (Queue->TailOffset - 1) % QueueMaxLength;
		if(Queue->TailOffset < 0)Queue->TailOffset = QueueMaxLength + Queue->TailOffset;
		return i;
	}
	else//第1次循环过程
	{
		i = Queue->Data[Queue->TailOffset];
		Queue->DataLength--;
		Queue->TailOffset--;
		return i;
	}
}

int main(void)
{
	int i = 0,k = 0;
	QUEUE * Queue;
	DataType j;
	
	Queue = CreateQueue();
	SetQueueNull(Queue);
	printf("Queue's address is:%d\n",Queue);
	while(1)
	{
		printf("Please enter %d of the XHDL:",i);
		i++;
		scanf("%d",&j);
		if(j == 100)
		{
			if(Queue->DataLength > QueueMaxLength)
			{
				for(k = Queue->TailOffset + 1;k < QueueMaxLength;k++)
				{
					printf("Queue[%d]=%d\n",k,Queue->Data[k]);
				}
				for(k = 0;k < Queue->TailOffset + 1;k++)
				{
					printf("Queue[%d]=%d\n",k,Queue->Data[k]);
				}
			}
			else
			{
				for(k=0;k<Queue->DataLength;k++)
				{
					printf("Queue[%d]=%d\n",k,Queue->Data[k]);
				}
			}
		}
		if(j == 101)
		{
			printf("OutQueue=%d\n",OutQueue(Queue));
		}
		if((j != 100) && (j != 101))
		{
			InQueue(Queue,j);
		}
	}
	return 0;
}


发表评论:

Powered By Z-BlogPHP 1.6.4 Valyria

Copyright itdoy . All Rights Reserved.备案号:琼ICP备15000663号-1