对链式队列结构实现的探讨

一个数据的结构就像数据的骨架,好的数据结构不仅仅可以节省空间,还可以为程序的实现提供最大的便利,由于助教的原因,让我又有一次机会去认识那些曾经熟悉但是未必真正懂的数据结构。

以前,可能更多的只是去接受,书上这样写,所以我就这样接受,这次重新接触,心中却有点抵触,为什么要这样实现,其他方法没有更加方便吗?

队列的链式结果,熟悉严蔚敏书籍的同学应该都会看到这样的结构描述

typedef struct QNode{//创建队成员
int data;//数据成员
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{//队头队尾指针
QueuePtr front;
QueuePtr rear;
}LinkQueue;

刚刚开始,只是接受,直到现在我才缓过神来,其实这样书写才是最简便的。为什么?

typedef struct QNode{
int data;
struct QNode *next;
struct QNode *front;
struct QNode *rear;
}QNodes,*QueuePtr;

看我的偷懒的实现,刚开始觉得这样写就很简便啊,但是直到添加元素的时候,发现元素其实不需要frontrear指针,这样无形中会浪费很多的数据空间,每次在添加元素的时候,元素都带着两个无用的指针,在说说对于队头和尾来说,也是种累赘,对于头和队尾,它不需要去存储真实的数据元素,也不需要指向下一个元素的指针,所以这种实现无时不刻都在浪费我们的存储空间。

对于队头和队尾指针,我们只是利用他们来指向队头和队尾元素,其他没有任何意义,所以严蔚敏书籍中的实现是有一定意义的,为节省数据空间做了最大化的努力。所以在设计数据结构时候,应该想清楚为什么要这样设计,每一个数据元素的设计是否都可以充分利用数据空间,是否会造成浪费,如果这些问题都不存在,那说明我们设计的数据结构确实实用。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值