2011年6月17日 星期五

EX18. 使用陣列建立佇列

修改程式範例: Ch6-2-1.c 為 Ch6-2-1e.c
1.請使用陣列方式建立佇列
2.請於程式中加入功能如下: [1]存入 [2]取出 [3]顯示全部…
[1]存入 : 詢問輸入存入值
[2]取出 : 顯示取出佇列元素
[3]顯示全部 :顯示輸入佇列的元素/取出佇列的元素/剩下佇列的元素
3.功能參考(ch6-2-2.c)



1
2
3
4
5
6
7
8
9
/* 程式範例: Ch6-2-1.h */
#define MAXQUEUE 10          /* 佇列的最大容量 */
int queue[MAXQUEUE];         /* 佇列的陣列宣告 */
int front = -1;              /* 佇列的前端 */
int rear = -1;               /* 佇列的尾端 */
/* 抽象資料型態的操作函數宣告 */
extern int isQueueEmpty(); 
extern int enqueue(int d);
extern int dequeue();




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/* 程式範例: Ch6-2-1e.c */
#include <stdio.h>
#include <stdlib.h> 
#include "Ch6-2-1.h"
/* 函數: 檢查佇列是否是空的 */
int isQueueEmpty() {
   if ( front == rear ) return 1;
   else                 return 0;
}
/* 函數: 將資料存入佇列 */
int enqueue(int d) {
   if ( rear >= MAXQUEUE )  /* 是否超過佇列容量 */
     return 0;
   else {
      queue[++rear] = d;    /* 存入佇列 */
      return 1;
   }
}
/* 函數: 從佇列取出資料 */
int dequeue() {
   if ( isQueueEmpty() )   /* 佇列是否是空的 */
      return -1;
   else
      return queue[++front];/* 取出資料 */
}
/* 主程式 */
int main() {   
   int input[100], output[100]; /* 儲存輸入和取出元素 */
   int select = 1;              /* 選項 */
   int numOfInput  = 0;         /* 陣列的元素數 */
   int numOfOutput = 0;
   int i, temp;
   printf("鏈結串列的佇列處理......\n");                 
   while ( select != 3 ) {       /* 主迴圈 */
      printf("[1]存入 [2]取出 [3]顯示全部內容 ==> ");
      scanf("%d", &select);      /* 取得選項 */
      switch ( select ) {
         case 1: /* 將輸入值存入佇列 */
            printf("請輸入存入值(%d) ==> ", numOfInput);
            scanf("%d", &temp);  /* 取得存入值 */
            enqueue(temp); 
            input[numOfInput++] = temp;
            break;
         case 2: /* 取出佇列的內容 */
            if ( !isQueueEmpty() ) {
               temp = dequeue();
               printf("取出佇列元素: %d\n", temp);
               output[numOfOutput++] = temp;
            }
            break;
      }
   }
   printf("輸入佇列的元素: ");    /* 輸入元素 */
   for ( i = 0; i < numOfInput; i++ )
      printf("[%d]", input[i]);
   printf("\n取出佇列的元素: ");  /* 輸出元素 */
   for ( i = 0; i < numOfOutput; i++ )
      printf("[%d]", output[i]);
   printf("\n剩下佇列的元素: ");  /* 取出剩下佇列元素 */
   while ( !isQueueEmpty() )
      printf("[%d]", dequeue()); 
   printf("\n");
   system("PAUSE");
   return 0; 
}


執行結果:
鏈結串列的佇列處理......
[1]存入 [2]取出 [3]顯示全部內容 ==> 1
請輸入存入值(0) ==> 1
[1]存入 [2]取出 [3]顯示全部內容 ==> 1
請輸入存入值(1) ==> 2
[1]存入 [2]取出 [3]顯示全部內容 ==> 1
請輸入存入值(2) ==> 3
[1]存入 [2]取出 [3]顯示全部內容 ==> 1
請輸入存入值(3) ==> 4
[1]存入 [2]取出 [3]顯示全部內容 ==> 1
請輸入存入值(4) ==> 5
[1]存入 [2]取出 [3]顯示全部內容 ==> 2
取出佇列元素: 1
[1]存入 [2]取出 [3]顯示全部內容 ==> 2
取出佇列元素: 2
[1]存入 [2]取出 [3]顯示全部內容 ==> 2
取出佇列元素: 3
[1]存入 [2]取出 [3]顯示全部內容 ==> 3
輸入佇列的元素: [1][2][3][4][5]
取出佇列的元素: [1][2][3]
剩下佇列的元素: [4][5]
請按任意鍵繼續 . .

1 則留言: