第六次作业

链表

一、视频笔记

 

 

二、代码编写列表:

 

三、观看视频过程中遇到的问题:

1、既然通过数组可以保存一组数据,经学习,通过链表也可以保存一组数据,那么两者有什么区别?

 答:通过查找课本后,发现以下区别:

(1)使用数组保存数据时,必须事先确定数组大小;而链表则不必,在程序运行过程中要为链表增加新的结点,可以随时用动态存储分配的方式,分配一个新的结点空间,然后再把新结点“链到”链表的末尾就可以了。(修改原链表最后一个结点的指针域,让它指向新结点)

(2)数组元素的内存空间连续,使数组元素的插入和删除都非常麻烦(需要依次移动元素腾出位置或填补空缺);但由于链表的各结点的存储空间可以不连续,链表结点在内存中的位置可以任意忙着使得链表结点的插入和删除都变得异常方便

(3)通过数组名和下标课直接存取数组中间的任意一个元素,比较方便。然而链表就比较麻烦,要访问链表中的一个结点,都必须从第一个结点开始,按照各结点的指针域,一个一个的“顺”下来,直到到达所需要的结点为止。

(4)用数组保存一批数据时,只需要保存数据本身就可以了;而用链表保存时,不但要保存数据本身,还要为每一数据另设指针域的存储空间保存下一数据的地址。因此保存同样多的数据时,链表比数组要占用更多的存储空间。

2、字符串处理中的while语句和链表编历中是while语句会搞混

解决办法:查课本:字符串处理的while语句应写为while(*p),而链表编历的while语句应写为while(p)。没有*号。

区分:字符串处理时,终止条件是遇到‘\0’,是p所指向的字符为‘\0’ 而不是p本身保存的地址为‘\0’,自然应该写成while(*p)。而链表编历中的p是指向结点的,终止条件是p本身为0时,因此应该写为while(p).

四、PTA中存在的问题:

2-2、设有如下定义的链表,则值为7的表达式是(D)

            struct st{

               int n;

               struct st *next;} a[3] = {5,&a[1], 7,  &a[2], 9, NULL},*p =&a;

A、p->n             B、(p->n)++              C、++p->n                D、p->next->n

我认为这道题应该选D.A选项是指向a[0],n值是5.

B选项是指向a[0]再进行++,n值为6

C选项应该和B选项结果一致

D选项是指向a[1],n值为7

 

posted on 2020-04-25 15:46  王靖博  阅读(257)  评论(0编辑  收藏  举报