陣列實作佇列

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


  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define max 10
  4.  
  5. int queue[max] = {0};
  6. int front = -1;
  7. int rear = -1;
  8.  
  9. int main(void)
  10. {
  11. int value, select = 1;
  12. while(rear < max - 1 && select != 3)
  13. {
  14. printf("請輸入1. 存入數值 2. 取出數值 3. 結束: ");
  15. scanf("%d", &select);
  16. switch(select)
  17. {
  18. case 1:
  19. printf("請輸入數值: ");
  20. scanf("%d", &value);
  21. rear++;
  22. queue[rear] = value;
  23. break;
  24. case 2: // 取出
  25. if(rear > front)
  26. {
  27. front++;
  28. printf("取出的值為 %d\n", queue[front]);
  29. queue[front] = 0; // 取完
  30. }
  31. break;
  32. default:
  33. break;
  34. }
  35. }
  36. printf("輸出佇列中所有元素: ");
  37. if(rear == max - 1)
  38. printf("佇列已滿\n");
  39. else if(front >= rear)
  40. printf("佇列已空\n");
  41. else
  42. {
  43. while(rear > front)
  44. {
  45. front++; // 都取出來
  46. printf("%d ", queue[front]);
  47. }
  48. printf("\n");
  49. }
  50. return 0;
  51. }

留言

這個網誌中的熱門文章

機率筆記 (1)

離散數學筆記 — vertex cut

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