2.1试述头结点、首元结点、头指针这三个概念的区别。
2.2线性表有两种存储结构:顺序表和链表。试问:如果线性表的元素个数基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素,那么应采用哪种数据结构?为什么?
2.3设单链表结点指针域为next,试写出删除链表中指针p所指结点的直接后续的C语言语句。
头结点、首元结点、头指针区别为:性质不同、目的不同、存在情况不同。
一、性质不同
1、头结点:头结点是在链表的首元结点之前附设的一个结点。
2、首元结点:首元结点是指链表中存储线性表中第一个数据元素a1的结点。
3、头指针:头指针是指向链表中第一个结点(或为头结点或为首元结点)的指针。
二、目的不同
1、头结点:头结点为了方便操作链表而附设的。
2、首元结点:首元结点作为链表的开始结点。
3、头指针:头指针为了指向链表的基地址。
三、存在情况不同
1、头结点:头结点对于单链表来说,头结点可有可无,但为了操作方便,一般情况下单链表都具有头结点。
2、首元结点:首元结点如果单链表有头结点,则首元结点为头结点的下一个结点,如果单链表没有头结点,则首元结点就是单链表的第一个结点。
3、头指针:头指针如果单链表有头结点,则头指针指向头结点,如果单链表没有头结点,则头指针指向第一个首元结点。
2.1
头结点:是为了方便操作链表而附设的,头结点数据域通常用来保存跟链表有关的信息,比如链表的长度;
首元结点:就是链表里“正式”的第一个结点,即链表的开始结点。形如a1,a2,a3,...an;
头指针:头指针是指向链表的基地址。如果链表存在头结点则头指针就是指向头结点的地址,反之指向首元结点的地址。
2.2
如果要求以最快的速度存取线性表中的数据,则应当采取顺序表,因为顺序表适用于频繁访问,且增删改较小,但增加可移除结点速度慢。而链表则适用于频繁增删改,因为要移动结点的次数少,但访问速度慢,因为要挨个去走访。
2.3
q=p->next; // p的后继赋给q