對這次寫對的程序,很深刻。
對於隊的結構很深的理解,
以前總覺得簡單的程序,
會心裏不由不想寫和實踐,
就是沒有什麼動力去寫,
不就是先進先出嗎。
但是自己編寫,編譯,執行,調式。。。。
發現原來自己很多不是真正的明白,
調式時候,總找不出原因。
思考整個執行過程,這邏輯是完全正確,
不知道程序哪裏錯誤,
最無語的是編譯正確無誤,執行總不出現想要的結果??
就這樣陷入深刻的思考。
這次也是這樣的情況,
調式很久,
根據執行情況,來推斷哪裏可能出現錯誤,
一步一步的執行,
如果你不調式,完全紙上談兵的話,
我就是在紙上畫下自己執行過程圖,發現根本沒有問題,
永遠掉不出來,
結果我慢慢調式,結果出現,都令自己無語,
竟然是判斷語句中==寫成了=,
哇塞低級錯誤,
無語了
這樣程序沒有問題,,,,
同時,對鏈式的隊有深刻的理解
隊的入隊就是尾隊建立鏈,
隊的出對就是頭隊指示出下個,
奇妙的是隊尾與隊頭編寫,
他們是公用一個內存空間地址,
但是他們指針執行不同地址。
#include <stdlib.h>
#include <iostream>
using namespace std;
#define OK 1
#define ERROR 0
typedef struct Queue {
int data;
struct Queue *next;
}Queue,*listQueue;
typedef struct {
listQueue front;
listQueue rear;
}HEQueue;
bool initQueue(HEQueue &Q) {
Q.front = Q.rear = (listQueue)malloc(sizeof(Queue));//初始化,兩個指針用同一個內存空間;當一個指針改變內容時候,另一個指針內容也改變
if(!Q.front) return ERROR;
Q.front->next = NULL;
return ERROR;
}
bool enterQueue(HEQueue &Q,int elem) {
listQueue P;
P = (listQueue)malloc(sizeof(Queue));
if(!P) return ERROR;
P ->data = elem;
P ->next = NULL;
Q.rear ->next = P;
Q.rear = P;
cout << &Q.front << "/" << &Q.front << endl;
return OK;
}
bool deleteQueue(HEQueue &Q,int &elem) {
listQueue P;
if(Q.front == Q.rear) return ERROR;
P = Q.front ->next;
elem = P ->data;
cout << "delete: " << elem << endl;
Q.front ->next = P ->next;
if(Q.rear == P)
Q.rear = Q.front;
free(P);
return OK;
}
bool main() {
HEQueue Q;
int elem;
initQueue(Q);
enterQueue(Q,6);
// deleteQueue(Q,elem);
enterQueue(Q,5);
// deleteQueue(Q,elem);
enterQueue(Q,4);
deleteQueue(Q,elem);
deleteQueue(Q,elem);
deleteQueue(Q,elem);
free(Q.front);
// free(Q.rear);
Q.front = Q.rear = NULL;
while(1);
return OK;
}
執行結果: