鏈隊列的初始化 判斷隊列是否為空 入隊列 出隊列



鏈隊列的初始化 判斷隊列是否為空 入隊列 出隊列 等等操作先上個示意圖(圖片來源 嚴蔚敏版數據結構) 可能更好理解
1
// 2 // main.cpp 3 // WWLinkQueueBasic 4 // 5 // Created by Live on 2017/8/22. 6 // Copyright © 2017年 ITCoderW. All rights reserved. 7 // 8 //參考書籍:嚴蔚敏版數據結構 數據結構高分閱讀等 9 10 #include <iostream> 11 using namespace std; 12 13 #define maxSize 1000 14 #define WWStr(str) #str 15 #define WWLine "-------------" 16 17 18 /** 19 鏈隊列結點結構體 20 */ 21 typedef struct LinkQueueNode{ 22 int data; //數據域 23 struct LinkQueueNode *next; //指針域 24 }LinkQueueNode; 25 26 27 /** 28 鏈隊列類型定義(只有一個頭尾指針而已) 29 */ 30 typedef struct{ 31 LinkQueueNode *front; //鏈隊列頭指針 32 LinkQueueNode *rear; //鏈隊列尾指針 33 }LinkQueue; 34 35 36 /** 37 鏈隊列相關操作 38 */ 39 void linkQueueOperation(); 40 /** 41 初始化鏈隊列 42 43 @param linkQueue 鏈隊列linkQueue 44 */ 45 void initLinkQueue(LinkQueue *&linkQueue); 46 47 /** 48 判斷鏈隊列是否為空 49 50 @param linkQueue 鏈隊列 51 */ 52 53 /** 54 判斷鏈隊列是否為空 55 56 @param linkQueue 鏈隊列 57 @return 為空返回1 不為空返回0 58 */ 59 int isEmptyLinkQueue(LinkQueue *linkQueue); 60 61 /** 62 入隊列 63 64 @param linkQueue 鏈隊列 65 @param x 要入隊列的元素 66 */ 67 void enLinkQueue(LinkQueue *linkQueue,int x); 68 #pragma mark - 出隊列 69 70 /** 71 鏈隊列出隊列 72 73 @param linkQu 要出隊列的鏈隊列 74 @param x 返回出隊列的數據域的值 75 @return 返回能否出隊列 76 */ 77 int outLinkQueue(LinkQueue *linkQu,int &x); 78 79 int main(int argc, const char * argv[]) { 80 linkQueueOperation(); 81 return 0; 82 } 83 84 85 #pragma mark - 鏈隊列相關操作 86 void linkQueueOperation(){ 87 88 LinkQueue *linkQueue; 89 initLinkQueue(linkQueue); 90 isEmptyLinkQueue(linkQueue); 91 //1 2 3 依次入隊列 92 enLinkQueue(linkQueue, 1); 93 enLinkQueue(linkQueue, 2); 94 enLinkQueue(linkQueue, 3); 95 // 96 int currentFrontData; 97 outLinkQueue(linkQueue, currentFrontData); 98 outLinkQueue(linkQueue, currentFrontData); 99 outLinkQueue(linkQueue, currentFrontData); 100 101 outLinkQueue(linkQueue, currentFrontData); 102 103 enLinkQueue(linkQueue, 4); 104 outLinkQueue(linkQueue, currentFrontData); 105 106 107 } 108 109 #pragma mark - 初始化鏈隊列 110 void initLinkQueue(LinkQueue *&linkQueue){ 111 112 cout<<WWLine<<WWStr(鏈隊列初始化操作地址)<<&linkQueue<<WWLine<<endl; 113 //之前一直是筆誤導致了下邊的這種情況的發生 還找了半天錯 所以以后的話最好要注意別把參數名和類型的名字寫得太像 114 // linkQueue = (linkQueue *)malloc(sizeof(linkQueue)); 115 linkQueue = (LinkQueue *)malloc(sizeof(LinkQueue)); 116 linkQueue->front = NULL; 117 linkQueue->rear = linkQueue->front; 118 119 } 120 121 #pragma mark - 判斷隊列是否為空 122 int isEmptyLinkQueue(LinkQueue *linkQueue){ 123 cout<<WWLine<<WWStr(判斷鏈隊列是否為空 隊列地址)<<&linkQueue<<WWLine<<endl; 124 if (linkQueue->front == NULL || linkQueue->rear == NULL) { 125 return 1; 126 } 127 return 0; 128 } 129 130 #pragma mark - 入隊列 131 void enLinkQueue(LinkQueue *linkQueue,int x){ 132 cout<<WWLine<<WWStr(進入鏈隊列地址)<<linkQueue<<WWLine<<endl; 133 134 cout<<WWStr(當前入隊列的元素)<<x<<endl; 135 LinkQueueNode *Node = (LinkQueueNode*)malloc(sizeof(LinkQueueNode)); 136 Node->data = x; 137 Node->next = NULL; 138 139 if(isEmptyLinkQueue(linkQueue)){ 140 //如果入的是空隊列 則新結點是隊首結點也是隊列尾結點 141 linkQueue->front = Node; 142 linkQueue->rear = linkQueue->front; 143 }else{ 144 //將新結點鏈到隊列尾部 rear指向它 145 linkQueue->rear->next = Node; 146 linkQueue->rear = Node; 147 } 148 149 } 150 151 #pragma mark - 出隊列 152 int outLinkQueue(LinkQueue *linkQu,int &x){ 153 cout<<WWLine<<WWStr(出隊列鏈隊列地址)<<linkQu<<WWLine<<endl; 154 155 if (isEmptyLinkQueue(linkQu)) { 156 //鏈隊列為空不能夠出隊列 157 cout<<WWStr(鏈隊列為空,不能出隊列)<<endl; 158 return 0; 159 } 160 161 //把當前鏈隊列的頭的數據賦值給x 162 LinkQueueNode *Node = linkQu->front; 163 x = Node->data; 164 165 cout<<WWStr(當前出隊列的元素:)<<x<<endl; 166 167 //移動指針 如果有的話 front指向下一個結點 168 if(linkQu->front == linkQu->rear){ 169 linkQu->front = NULL; 170 linkQu->rear =NULL; 171 }else{ 172 linkQu->front = linkQu->front->next; 173 } 174 free(Node); 175 return 1; 176 }


運行結果如下:

-------------鏈隊列初始化操作地址0x7fff5fbff618-------------

-------------判斷鏈隊列是否為空隊列地址0x7fff5fbff5c0-------------

-------------進入鏈隊列地址0x100202f90-------------

當前入隊列的元素1

-------------判斷鏈隊列是否為空隊列地址0x7fff5fbff560-------------

-------------進入鏈隊列地址0x100202f90-------------

當前入隊列的元素2

-------------判斷鏈隊列是否為空隊列地址0x7fff5fbff560-------------

-------------進入鏈隊列地址0x100202f90-------------

當前入隊列的元素3

-------------判斷鏈隊列是否為空隊列地址0x7fff5fbff560-------------

-------------出隊列鏈隊列地址0x100202f90-------------

-------------判斷鏈隊列是否為空隊列地址0x7fff5fbff540-------------

當前出隊列的元素:1

-------------出隊列鏈隊列地址0x100202f90-------------

-------------判斷鏈隊列是否為空隊列地址0x7fff5fbff540-------------

當前出隊列的元素:2

-------------出隊列鏈隊列地址0x100202f90-------------

-------------判斷鏈隊列是否為空隊列地址0x7fff5fbff540-------------

當前出隊列的元素:3

-------------出隊列鏈隊列地址0x100202f90-------------

-------------判斷鏈隊列是否為空隊列地址0x7fff5fbff540-------------

鏈隊列為空,不能出隊列

-------------進入鏈隊列地址0x100202f90-------------

當前入隊列的元素4

-------------判斷鏈隊列是否為空隊列地址0x7fff5fbff560-------------

-------------出隊列鏈隊列地址0x100202f90-------------

-------------判斷鏈隊列是否為空隊列地址0x7fff5fbff540-------------

當前出隊列的元素:4

Program ended with exit code: 0

 

如有錯誤 敬請指正

如需轉載 請注明出處 謝謝

獲取源碼



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM