以下例子主要在說明如何在純種 C 語言中實作出一個佇列(Queue, 排隊), 至於 Queue 的定義以及用途請參考計概課本或是資料結構課本, 或者用 google.com 找一找應該也可看到許多實例與說明! tsaiwn@magpie % cat -n que.c 1 // que.c -- use C to inplement Queue as a circular queue 2 enum{ NELEMENT=99 }; // good habit 3 static long data[NELEMENT]; 4 static int phead=0, ptail=0; // phead 指向queue的前頭, ptail指向尾巴 5 initQueue(void){ phead = ptail = 0; } 6 void enque(long); 7 long deque(void); 8 long front(void) { return data[phead]; } 9 int isempty(void) { return (phead == ptail) ;} 10 int isfull(void) { return ((ptail+1) % NELEMENT) == phead; } //留一個不用! 11 ////// ////// 12 void push(long x) { enque(x); } 13 long pop(void) { return deque( ); } 14 long top(void) { return front( ); } 15 int empty(void) { return isempty( );} 16 int full(void) { return isfull( );} 17 /////// /////// /////// /////// /////// /////// 18 void enque(long x) { 19 if( isfull() ) { return; } // may want to give some error message? 20 data[ptail] = x; 21 ptail++; 22 ptail %= NELEMENT; /* x %= y; means x = x % y; */ 23 } 24 long deque(void) { 25 if( !isempty() ) { 26 long tmp=data[phead]; 27 phead++; phead %= NELEMENT; 28 return tmp; 29 } // if !isempty 30 } tsaiwn@magpie % gcc -c que.c <=== 要求只要生出機器碼檔案 que.o tsaiwn@magpie % nm que.o <=== 要求列出 que.o 內的 symbols 0000018c C data 000000f4 T deque 0000009e T empty 000000b2 T enque 00000019 T front 000000a8 T full 00000000 T initQueue 0000002a T isempty 00000040 T isfull 00000000 D phead 00000087 T pop 00000004 D ptail 00000071 T push 00000094 T top tsaiwn@magpie % cat -n tstque.c 1 /// tstque.c -- example to use the circular Queue written in C language 2 // by Wen-Nung Tsai, tsaiwn@csie.nctu.edu.tw 3 // gcc -c que.c 4 // gcc tstque.c que.o ; ./a.out 5 /**********************************/ 6 #include 7 int main( ) { 8 printf("Test queue written in C Language.\n"); 9 enque(53); 10 enque(770); 11 enque(880); 12 while( !isempty( ) ) { 13 printf("%ld ", deque( ) ); 14 } 15 printf("\n===bye\n"); 16 return 0; 17 } tsaiwn@magpie % gcc tstque.c que.o tsaiwn@magpie % ./a.out Test queue written in C Language. 53 770 880 ===bye tsaiwn@magpie % echo p621