读《数据结构(C语言版)》(5)

考研终于尘埃落定,这个系列也得以继续。查看上篇文章的发表日期,已一月有余。回想这一个月中的种种经历,仍然心有余悸,听到看到的种种现象,更是让人触目惊心。还好,一切都过去了,我又可以静静地写文章了。

上篇谈到线性表的顺序表示,这次接着谈线性表的链式表示。顺序表示的优势很明显,它在数据的物理位置中隐含了数据的逻辑关系,简单直接又威力无穷。但缺点也很明显,在做插入或删除操作时,需要移动大量数据。为了克服这个缺点,可以使用链式存储。

链式存储不用物理位置隐含表示数据关系,它增加了一个指针域专门用来描述数据间的先后次序关系。在一个节点中,数据域存储数据信息,而指针域存储数据关系信息,结构真是“相当的”清晰。这样虽然克服了顺序表示的缺点,但同时带来了两个弊端。一是要存储的数据量变大,二是不能随机访问某一个节点。所以线性表的两种物理表示没有好坏之分,只有适用不适用的区别。

作者在介绍链式表示时,还介绍了一种静态单链表。它用数组来存储链式表示中的节点,其中存储节点的指针域不是C语言中的指针,而是这个数组的下标,这个下标指定了下一个数据元素在数组中的位置。作者介绍说,这种描述方法便于在不设“指针”类型的高级程序设计语言中使用链表结构。这种描述方法和有指针的链表区别不大,除了要程序员自己实现malloc和free两个函数。其实说白了,这种方法就是要程序员管理一大片连续的内存,在这篇内存中实现链式存储,其中主要就是实现分配和回收。

说到这里你会发现,线性表是一种逻辑结构,顺序表示和链式表示是这种逻辑结构的两种物理表示。而在链式表示中,具体的实现又可以分为动态和静态链表。在这个层次上,链式表示是一种逻辑结构,而动态链表和静态链表是这种逻辑结构的两种物理表示。这么说好像有点唐僧,他明白了,你明白了吗?总之逻辑和物理并不是绝对的,但先逻辑后物理是一般的思考方法。

其实学计算机对数学要求高,也和先逻辑后物理的思考方法相关。数学是用在逻辑这一层的,逻辑上想清楚了,大的方向就对了,至于物理实现,只是用计算机把逻辑思维表示出来,真正的挑战还在逻辑层面。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值