链式结构的队(练习)

对这次写对的程序,很深刻。

对于队的结构很深的理解,

以前总觉得简单的程序,

会心里不由不想写和实践,

就是没有什么动力去写,

不就是先进先出吗。

但是自己编写,编译,执行,调式。。。。

发现原来自己很多不是真正的明白,

调式时候,总找不出原因。

思考整个执行过程,这逻辑是完全正确,

不知道程序哪里错误,

最无语的是编译正确无误,执行总不出现想要的结果??

就这样陷入深刻的思考。

 

这次也是这样的情况,

调式很久,

根据执行情况,来推断哪里可能出现错误,

一步一步的执行,

如果你不调式,完全纸上谈兵的话,

我就是在纸上画下自己执行过程图,发现根本没有问题,

永远掉不出来,

结果我慢慢调式,结果出现,都令自己无语,

竟然是判断语句中==写成了=,

哇塞低级错误,

无语了

这样程序没有问题,,,,

 

同时,对链式的队有深刻的理解

队的入队就是尾队建立链,

队的出对就是头队指示出下个,

 

奇妙的是队尾与队头编写,

他们是公用一个内存空间地址,

但是他们指针执行不同地址。

 

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

执行结果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值