对这次写对的程序,很深刻。
对于队的结构很深的理解,
以前总觉得简单的程序,
会心里不由不想写和实践,
就是没有什么动力去写,
不就是先进先出吗。
但是自己编写,编译,执行,调式。。。。
发现原来自己很多不是真正的明白,
调式时候,总找不出原因。
思考整个执行过程,这逻辑是完全正确,
不知道程序哪里错误,
最无语的是编译正确无误,执行总不出现想要的结果??
就这样陷入深刻的思考。
这次也是这样的情况,
调式很久,
根据执行情况,来推断哪里可能出现错误,
一步一步的执行,
如果你不调式,完全纸上谈兵的话,
我就是在纸上画下自己执行过程图,发现根本没有问题,
永远掉不出来,
结果我慢慢调式,结果出现,都令自己无语,
竟然是判断语句中==写成了=,
哇塞低级错误,
无语了
这样程序没有问题,,,,
同时,对链式的队有深刻的理解
队的入队就是尾队建立链,
队的出对就是头队指示出下个,
奇妙的是队尾与队头编写,
他们是公用一个内存空间地址,
但是他们指针执行不同地址。
#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;
}
执行结果: