陣列實作佇列

思路
以陣列來建立佇列,擁有兩個動作 — 加入和刪除,並且用 front 和 rear 分別指向佇列的前端和尾端。
一開始,front 和 rear 都預設為 -1,每加入一個元素,rear 的值 + 1;每刪除一個元素,front 的值 + 1。
以陣列建立的缺點是大小無法事先規劃。


#include<stdio.h>
#include<stdlib.h>
#define max 10

int queue[max] = {0};
int front = -1;
int rear = -1;

int main(void)
{
	int value, select = 1;
	
	while(rear < max - 1 && select != 3)
	{
		printf("請輸入1. 存入數值  2. 取出數值  3. 結束: ");
		scanf("%d", &select);
		
		switch(select)
		{
			case 1:
				printf("請輸入數值: ");
				scanf("%d", &value);
				rear++;
				queue[rear] = value;
				break;
			case 2:							// 取出 
				if(rear > front)
				{
					front++;
					printf("取出的值為 %d\n", queue[front]);
					queue[front] = 0;			// 取完 
				}
                                break;
			default:
				break;
		}
	}
	printf("輸出佇列中所有元素: ");
	if(rear == max - 1)
		printf("佇列已滿\n");
	else if(front >= rear)
		printf("佇列已空\n");
	else
	{
		while(rear > front)
		{
			front++;					// 都取出來
			printf("%d ", queue[front]); 
		}
		printf("\n");
	}
	
	return 0;
}

留言

這個網誌中的熱門文章

離散數學筆記 — vertex cut

機率筆記 (1)

機率筆記 (4) — 隨機變數