考研网 发表于 2018-12-4 20:41:04

2019考研计算机线性表算法:尾插法建表

2019考研计算机专业课的考试内容,主要包括数据结构、计算机组成原理、操作系统和计算机网络。其中,数据结构和计算机组成原理均占45分,操作系统35分,计算机网络25分。其中数据结构课程以抽象为主,具体操作上来说,包括数组的实现方法和链表的实现方法。本期新东方在线与考生分享的是考研计算机数据结构中单链表—尾插法建表的方法,希望对考生有所帮助。
    尾插法建表:该方法是将新结点插到当时链表的表尾上,为此,必须增加一个尾指针 r ,
    使其始终指向当时链表的尾节点。
    void CreateListR (LinkList *&L,int a [ ],int n )
    {
    LinkList *s,*r; // s 是指向新结点的指针,r 是指向当时链表尾节点的指针
    L=(LinkList *) malloc (sizeof(LinkList)); // 创建头结点
    r=L; // *r 始终指向尾节点,开始时指向头结点
    for (int i=0;i
    {
    s=(LinkList *) malloc (sizeof(LinkList));
    s->data=a [ i ];
    r->next=s; // 将*s插入*r之后
    r=s;
    }
    r->next=NULL; // 尾节点next域置为NULL
    }
    尾插法与头插法最大的不同就在于,头插法只需要一个结点指针,而尾插法需要两个结点指针(不包含指向头结点的指针),多的那一个指针就是指向当时链表尾节点的尾指针,先记住这个不同点,然后我们再来看看代码部分。
    和头插法相同的部分就不再重复了,
r=L;这一句如果大家真正掌握了上述的话,我想写出来是不费吹灰之力的,没有吸收结点时,尾指针肯定是要指向头结点的,
    r->next=s的意思不就是将 s 所指向的结点作为 r
所指向的结点的后继么?这是什么?这不就是尾插法初衷么?尾插法不就是希望新加入的结点时作为当时链表的尾节点么?
    r=s;可不要小看了这一句噢,看似简单,却有深意滴,我们可以这样想,尾插法就是新吸收的结点作为当时链表的尾节点,而尾指针就是指向当时链表的尾节点的,那上一步中已经将
s 所指向的结点作为了当时链表的尾节点,那么现在是不是就应该让尾指针指向它呢?那是必须的。
页: [1]
查看完整版本: 2019考研计算机线性表算法:尾插法建表