1. 程式人生 > 實用技巧 >C資料結構-線性佇列

C資料結構-線性佇列

 1 //順序佇列
 2 #define MAXSIZE 10//假設佇列最多容納10個數,其實因為是迴圈佇列所以其實只最多能容納9個數
 3 #include<stdio.h>
 4 #include<stdlib.h>
 5 typedef    int    Status;//用Status來當作bool型別使用
 6 typedef struct SqQueue {
 7     int front;//定義佇列頭
 8     int rear;//定義佇列尾
 9     char data[MAXSIZE];//假設佇列裡的資料是char型別的資料
10 }SqQueue;
11 SqQueue SqQueue_test;    //
初始化佇列 12 void InitQueue() //初始化佇列 13 { 14 SqQueue_test.front = 0; 15 SqQueue_test.rear = 0; 16 //出棧用rear=front來判斷是否空了 17 //滿棧用front+1=rear來表示是否滿了,所以其實浪費了一個空間 18 } 19 Status EnQueue(char a) 20 { 21 //判斷佇列是否滿了 22 if ((SqQueue_test.front + 1) % MAXSIZE == SqQueue_test.rear) 23 {
24 return 0; 25 } 26 else 27 { 28 SqQueue_test.data[SqQueue_test.front] = a; 29 SqQueue_test.front = (SqQueue_test.front + 1) % MAXSIZE; 30 } 31 } 32 Status DeQueue() 33 { 34 if ((SqQueue_test.rear == SqQueue_test.front)) 35 { 36 //棧為空 37 return
0; 38 } 39 else 40 { 41 char temp = SqQueue_test.data[SqQueue_test.rear]; 42 printf("%c已出隊", temp); 43 SqQueue_test.rear = (SqQueue_test.rear + 1) % MAXSIZE; 44 } 45 } 46 int GetLenQueue()//得到棧的長度 47 { 48 return (MAXSIZE - SqQueue_test.rear % MAXSIZE + SqQueue_test.rear % MAXSIZE); 49 } 50 51 52 53 54 void test() 55 { 56 char a[] = "sadad"; 57 //入棧 58 for (int i = 0; i < 5; i++) 59 { 60 EnQueue(a[i]); 61 } 62 //出棧 63 for (int i = 0; i < 5; i++) 64 { 65 DeQueue(); 66 } 67 } 68 int main() 69 { 70 test(); 71 return 0; 72 }