鏈式結構的隊(練習)

對這次寫對的程序,很深刻。

對於隊的結構很深的理解,

以前總覺得簡單的程序,

會心裏不由不想寫和實踐,

就是沒有什麼動力去寫,

不就是先進先出嗎。

但是自己編寫,編譯,執行,調式。。。。

發現原來自己很多不是真正的明白,

調式時候,總找不出原因。

思考整個執行過程,這邏輯是完全正確,

不知道程序哪裏錯誤,

最無語的是編譯正確無誤,執行總不出現想要的結果??

就這樣陷入深刻的思考。

 

這次也是這樣的情況,

調式很久,

根據執行情況,來推斷哪裏可能出現錯誤,

一步一步的執行,

如果你不調式,完全紙上談兵的話,

我就是在紙上畫下自己執行過程圖,發現根本沒有問題,

永遠掉不出來,

結果我慢慢調式,結果出現,都令自己無語,

竟然是判斷語句中==寫成了=,

哇塞低級錯誤,

無語了

這樣程序沒有問題,,,,

 

同時,對鏈式的隊有深刻的理解

隊的入隊就是尾隊建立鏈,

隊的出對就是頭隊指示出下個,

 

奇妙的是隊尾與隊頭編寫,

他們是公用一個內存空間地址,

但是他們指針執行不同地址。

 

#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;
}

執行結果:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章