佇列的順序儲存實現
阿新 • • 發佈:2020-08-13
順序儲存佇列標頭檔案:
1 #pragma once 2 #include<stdlib.h> 3 #include<stdio.h> 4 #define MAX_SIZE 1024 5 6 //順序佇列結構體 7 typedef struct SEQQUEUE 8 { 9 void *data[MAX_SIZE]; 10 int size; 11 }SeqQueue; 12 13 //初始化佇列 14 SeqQueue* Init_SeqQueue(); 15 //入隊 16 void Push_SeqQueue(SeqQueue* queue, void* value); 17 //出隊 18 void Pop_SeqQueue(SeqQueue* queue); 19 //返回隊首元素 20 void* Front_SeqQueue(SeqQueue* queue); 21 //返回隊尾元素 22 void* Back_SeqQueue(SeqQueue* queue); 23 //返回佇列長度 24 int Size_SeqQueue(SeqQueue* queue); 25 //清空佇列 26 void Clear_SeqQueue(SeqQueue* queue); 27 //銷燬佇列 28 void Free_SeqQueue(SeqQueue* queue);
順序儲存佇列實現檔案:
1 #include "佇列順序儲存.h" 2 //初始化佇列 3 SeqQueue* Init_SeqQueue() 4 { 5 SeqQueue* queue = (SeqQueue*)malloc(sizeof(SeqQueue)); 6 if (queue == NULL) 7 { 8 exit(1); 9 } 10 11 queue->size = 0; 12 for (int i = 0; i < MAX_SIZE; ++i) 13 {14 queue->data[i] = NULL; 15 } 16 17 return queue; 18 } 19 //入隊陣列左邊做隊頭 20 void Push_SeqQueue(SeqQueue* queue, void* value) 21 { 22 if (queue == NULL) 23 { 24 exit(1); 25 } 26 27 if (value == NULL) 28 { 29 exit(1); 30 } 31 32 if (queue->size == MAX_SIZE) 33 { 34 exit(1); 35 } 36 37 queue->data[queue->size] = value; 38 queue->size++; 39 } 40 //出隊 41 void Pop_SeqQueue(SeqQueue* queue) 42 { 43 if (queue == NULL) 44 { 45 exit(1); 46 } 47 48 if (queue->size == 0) 49 { 50 exit(1); 51 } 52 53 for (int i = 0; i < queue->size-1; ++i) 54 { 55 queue->data[i] = queue->data[i + 1]; 56 } 57 queue->size--; 58 } 59 //返回隊首元素 60 void* Front_SeqQueue(SeqQueue* queue) 61 { 62 if (queue == NULL) 63 { 64 exit(1); 65 } 66 67 if (queue->size == 0) 68 { 69 exit(1); 70 } 71 72 return queue->data[0]; 73 } 74 //返回隊尾元素 75 void* Back_SeqQueue(SeqQueue* queue); 76 //返回佇列長度 77 int Size_SeqQueue(SeqQueue* queue) 78 { 79 if (queue == NULL) 80 { 81 exit(1); 82 } 83 84 return queue->size; 85 } 86 //清空佇列 87 void Clear_SeqQueue(SeqQueue* queue) 88 { 89 if (queue == NULL) 90 { 91 exit(1); 92 } 93 94 queue->size = 0; 95 } 96 //銷燬佇列 97 void Free_SeqQueue(SeqQueue* queue) 98 { 99 if (queue == NULL) 100 { 101 exit(1); 102 } 103 104 for (int i = 0; i < MAX_SIZE; ++i) 105 { 106 queue->data[i] = NULL; 107 } 108 queue->size = 0; 109 free(queue); 110 111 }
順序儲存佇列測試檔案:
1 #include"佇列順序儲存.h" 2 #include<string.h> 3 #include<stdlib.h> 4 #include<stdio.h> 5 6 #define M 8 7 #define N 3 8 //資料元素結構體 9 typedef struct PERSON 10 { 11 char name[64]; 12 int age; 13 }Person; 14 15 int main() 16 { 17 //建立迴圈連結串列 18 SeqQueue* queue = Init_SeqQueue(); 19 20 //建立資料 21 Person p1 = { "aaa",10 }; 22 Person p2 = { "bbb",20 }; 23 Person p3 = { "ccc",30 }; 24 Person p4 = { "ddd",40 }; 25 Person p5 = { "eee",50 }; 26 27 //入隊 28 Push_SeqQueue(queue, (Person*)&p1); 29 Push_SeqQueue(queue, (Person*)&p2); 30 Push_SeqQueue(queue, (Person*)&p3); 31 Push_SeqQueue(queue, (Person*)&p4); 32 Push_SeqQueue(queue, (Person*)&p5); 33 34 //返回隊首元素 35 Person* temp = (Person*)Front_SeqQueue(queue); 36 printf("value: %s age: %d\n", temp->name, temp->age); 37 38 //出隊 39 Pop_SeqQueue(queue); 40 41 //返回隊首元素 42 temp = (Person*)Front_SeqQueue(queue); 43 printf("value: %s age: %d\n", temp->name, temp->age); 44 45 int size = Size_SeqQueue(queue); 46 printf("長度%d\n", size); 47 48 //清空佇列 49 Clear_SeqQueue(queue); 50 51 size = Size_SeqQueue(queue); 52 printf("長度%d\n", size); 53 //銷燬佇列 54 Free_SeqQueue(queue); 55 return 0; 56 }
測試結果: