在链表中插入值
通过修改指针的值,就可以插入
island ,就像之前做的那样:
短短两行代码,就在链表插入了新值。但如果用数组,为了移动数组元素,你要多写很多代码。
好了,你已经学会了链表的创建与使用,现在就来练练吧……
代码冰箱贴
不好啦,有人弄乱了冰箱门上的 display() 函数,你能重组代码吗?
代码冰箱贴解答
不好啦,有人弄乱了冰箱门上的 display() 函数,你重组代码了吗?
这里没有蠢问题问:其他语言,比如 Java,有内置链表,C 语言有内置数据结构吗?答:C 语言没有内置数据结构,你必须自己创建它们。问:要是我有一个很长的链表,如果我想使用第 700 个元素,就必须从第一个开始一路读下去吗?答:是的,你必须这样做。问:这样可不好,本来我以为链表比数组好。答:数据结构没有好与坏之分,只有适合或不适合于它的应用场合之分。问:也就是说如果我想快速地插入数据,就需要链表,但如果我想直接访问元素,就应该用数组。是这样吗?答:完全正确。问:你给出的这个结构含有一个指向其他结构的指针。我能把指针换成一个递归定义的结构吗?答:不行。问:为什么?答:C 语言需要知道结构在存储器中占的具体大小,如果在结构中递归地复制它自己,那么两条数据就会不一样大。
试驾
我们对 island 链表使用 display() 函数,并把代码编译成一个叫 tour 的程序。
妙极了,代码创建了 island 链表,还能方便地插入元素。
好了,现在你已经掌握了使用递归结构和链表的基本方法,现在来看主程序。你需要从下面这个文件中读取飞行之旅的数据:
机场的工作人员还在创建文件,在程序停止之前,你都不知道文件有多大。文件中每一行都是一个岛名,把文件转换为链表应该不难,你说呢?
C 标准礼貌指南
本页上的代码在中间的位置声明了新变量 skull ,只有 C99 和 C11 标准才允许这样做,在 ANSI C 中,必须在函数的顶部声明局部变量。
没错,需要以某种方法创建动态存储。
到目前为止你写过的所有程序都使用了静态存储。每当你想保存一样东西,都在代码中添加了一个变量。这些变量通常保存在栈中,别忘了,栈是存储器中专门用来保存局部变量的区域。
当你创建前四座岛时,写了:island amity = {"Amity", "09:00", "17:00", NULL};island craggy = {"Craggy", "09:00", "17:00", NULL};island isla_nublar = {"Isla Nublar", "09:00", "17:00", NULL};island shutter = {"Shutter", "09:00", "17:00", NULL};
每个 island 结构都需要自己的变量。上面这段代码始终只会创建这四座岛。如果想要让代码保存更多的 island ,需要使用更多的局部变量。如果在编译时知道需要保存多少数据,那没问题,但程序在运行前往往不知道自己需要多少存储空间。打个比方,假如你在编写网页浏览器,那么在读取网页之前就不知道保存网页需要多少存储空间。因此 C 程序需要以某种方式让操作系统在它们需要的时候分配存储空间。
程序需要动态存储。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论