鏈式隊列初體驗

//@author:Archer
//@email:[email protected] || [email protected]
//模仿+練習+改進


#include <stdio.h>
#include <stdlib.h>


typedef struct queue
{
	int * pBase;

	int front;//隊頭

	int rear;//隊尾

	int length;//隊列最大長度

	int real_length;//隊列實際長度

}QUEUE,*PQUEUE;

void init_queue(PQUEUE);//初始化隊列

bool entry_queue(PQUEUE);//入隊操作

void traverse_queue(PQUEUE);//查看隊伍排列狀況

bool out_queue(PQUEUE);//出隊操作

bool full_queue(PQUEUE);//檢查隊列是否爲滿

bool empty_queue(PQUEUE);//檢查隊列是否爲空


int main(void)
{
	QUEUE queue;//定義一個queue的隊列

	PQUEUE pqueue = &queue;

	pqueue->real_length = 0;//初始化實際長度值

	init_queue(pqueue);

	entry_queue(pqueue);

	printf("\n隊列中實際有%d個元素\n\n",pqueue->real_length);

	traverse_queue(pqueue);

	out_queue(pqueue);

	printf("\n隊列中實際有%d個元素\n\n",pqueue->real_length);

	traverse_queue(pqueue);

	printf("\n\n");

	system("pause");
	return 0;
}

void init_queue(PQUEUE pqueue)//初始化隊列
{
	printf("請輸入要生成的隊列長度:");

	scanf("%d",&pqueue->length);

	pqueue->pBase = (int *)malloc(sizeof(int) * (pqueue->length));

	pqueue->front = pqueue->rear = 0;

	return;
}

bool entry_queue(PQUEUE pqueue)//入隊操作
{
	if(full_queue(pqueue))
	{
		printf("\n入隊操作失敗!\n");

		return false;
	}
	else
	{
		int count = 0;

		int len = 0;

		int value;

		

		printf("請輸入要入隊的個數(大於零小於%d):",len);

		scanf("%d",&len);

		while(count<len)
		{

			printf("請輸入第%d個入隊元素:",count+1);

			scanf("%d",&value);

			pqueue->pBase[pqueue->rear] = value;

			pqueue->rear = ((pqueue->rear) +1) % pqueue->length;

			pqueue->real_length++;

			count++;
		}

		return true;
	}
}

void traverse_queue(PQUEUE pqueue)//查看隊列排列情況
{
	int i =0;

	int count = pqueue->front;

	while(count!=pqueue->rear)
	{
		i++;

		printf("隊列第%d個元素爲:%d\n",i,pqueue->pBase[count]);

		count = (count+1) % pqueue->length;
	}

	return;
}

bool out_queue(PQUEUE pqueue)//出隊操作
{
	int i;

	int count = 0;

	int len =pqueue->real_length;

	int temp;

	if(empty_queue(pqueue))
	{
		printf("\n出隊操作失敗!\n");

		return false;
	}
	else
	{
		printf("\n\n請輸入要出隊的個數:");

		scanf("%d",&count);

		if(count>len)
		{
			count = len;
		}

		for(i=0;i<count;i++)
		{
			printf("\n要出隊的元素爲:%d\n",pqueue->pBase[pqueue->front]);

			temp = pqueue->pBase[pqueue->front];

			pqueue->front = ((pqueue->front) +1) % pqueue->length;

			printf("【%d】元素已出隊!\n",temp);

			pqueue->real_length--;
		}
	}
}


bool full_queue(PQUEUE pqueue)//檢查隊列是否爲滿
{
	if((pqueue->rear+1)%(pqueue->length)==pqueue->front)//或者pqueue->real_length == pqueue->length(但是容易忘了去計算real_queue,也就容易出錯)
	{
		printf("\n警告,隊列已滿!\n");

		return true;
	}
	else
	{
		return false;
	}
}

bool empty_queue(PQUEUE pqueue)//檢查隊列是否爲空
{
	if(pqueue->front==pqueue->rear)
	{
		return true;
	}
	else
	{
		return false;
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章