r=p;
p=p->link;r->link=p->link;printf("%4d",p->data);free(p);p=r->link;/x申请一个新的链结点。
//x存放第i个结点的编号。
//x至此,建立一个循环链表x//x此时p指向第一个出发结点。
/P指向第m个结点,r指向第m—/。
删除第m个结点,//x输出一个结点编号x//x释放被删除结点的空间x//*p指向新的出发结点x/1个结点x/
}
printf("最后被删除的节点是:
%4d\n",p->data);
}
习题2.1判断题(在你认为正确的题后的括号中打√,否则打X)。
(1)空线性表的特征是表中数据元素都未赋值。
(X)
(2)线性表的顺序存储结构必须占用一片地址连续的存储单元。
(√)
(3)用一维数组存储线性表时,表中第i个元素存放在下标为i的数组元素中。
(X)
(4)采用顺序存储结构的线性表又称为顺序表。
(√)
(5)—个数据元素的地址是指该元素占用的若干存储单元的第一个单元的地址。
(√)
(6)线性表占用的存储单元的数量与表中数据元素的类型有关。
(√)
(7)线性表的顺序存储结构要比链式存储结构节省存储空间。
(√)
(8)线性表的链式存储结构要比顺序存储结构节省存储空间。
(X)
(9)若线性表采用顺序存储结构线性表的长度等于表中元素的个数与每个元素所占内存单元之乘积。
(√)
(10)若线性表采用顺序存储结构,每个数据元素占用4个存储单元,第12个数据元素的存储地址为144则第1个数据元素的存储地址是101。
(X)
a+4(i-1)=144a+4*11=144a=100
(11)在长度为n的顺序表的第i个位置插入一个数据元素,i的合法值为1≤i≤N。
(X)1<=i<=N+1
(12)删除长度为n的顺序表的第i个数据元素,i的合法值为1≤i≤n。
(√)
(13)在长度为n的顺序表中插入一个数据元素的时间复杂度为O(n)。
(√)
(14)线性表的链式存储结构不必占用地址连续的存储空间。
(√)
(15)链表中的每个链结点占用的存储空间不必连续。
(X)
(16)一个链结点的地址是指该链结点占用的若干存储单元的第一个单元的地址。
(√)
(17)非空线性链表的最后那个链结点的指针域不能为空,应该存放NULL。
(√)
(18)所谓空链表是指没有任何链结点的链表。
(X)
(19)任何一个链表都可以根据需要设置一个头结点。
(√)
(20)每个链表的前面都必须设置一个头结点。
(X)
(21)线性链表(单向链表)中的每个链结点只有后继结点,没有前驱结点。
(X)
(22)一个空的链表不占用任何存储空间。
(X)
(23)若指针变量list指向一个空链表,则list中什么也没有。
(√)
(24)无论出现在算法的什么地方,符号p->data表示的意思都一样。
(√)
(25)在算法中,符号p->link表示p所指的下一个链结点的地址。
(√)
(26)删除非空线性链表的第一个链结点只需执行语句list=list->link。
(√)
(27)循环链表的最后那个链结点的指针域中存放着链表最前面那个结点的地址。
(X)
(28)设置一个指针变量,它可以遍历整个循环链表。
(√)
(29)双向链表的头结点指针要比线性链表的头结点指针占用更多的存储空间。
(√)
(30)在链结点数目相同的前提下,双向链表占用的空间是线性链表的2倍。
(X)
单项选择题。
B
(1)一个顺序表所占用的存储空间大小与——无关。
A.表的长度B.元素的存放顺序C.元素的类型D。
元素中各字段的类型
A
(2)设存储分配是从低地址到高地址进行的。
若每个元素占用4个存储单元,则某元素的地
址是指它所占用的单元的
A.第1个单元的地址B.第2个单元的地址
C.第3个单元的地址n第4个单元的地址
B(3)若线性表采用顺序存储结构,每个元素占用4个存储单元,第1个元素的存储地址为100,
则第12个元素的存储地址是.。
A.112B.144C.1480.412
D(4)若长度为n的线性表采用顺序存储结构,在表的第i个位置插入一个数据元素,i的合法值应该是——。
A.i>OB.i≤nC.1≤i≤nD.1≤i≤n+1
C(5)若长度为n的非空线性表采用顺序存储结构,删除表的第i个数据元素,i的合法值应该是
A.i>OB.i≤nC.1≤i≤nD。
1≤i≤n十1
A(6)若长度为n的非空线性表采用顺序存储结构,删除表的第i个数据元素,首先需要移动表
中——个数据元素。
A.n-iB.n+iC.n-i+lD.n-i-1
C(7)若长度为n的线性表采用顺序存储结构,在表的第i个位置插入一个数据元素,需要移动
表中——个元素。
。
A.iB.n+iC.n-i+lD.n-i-1
A(8)若频繁地对线性表进行插入和删除操作,该线性表应该采用——存储结构。
A.散列B.顺序C.链式D.索引
C(9)链表中所占用的存储单元地址一定是。
A.无序的B.连续的C.不连续的D.部分连续的
B(10)链表中的每一个链结点所占用的存储单元——。
A.不必连续B.一定连续C.部分连续D.连续与否无所谓
D(11)与单链表相比,双向链表的优点之一是。
A.插入、删除操作更简单B.可以进行随机访问
C.可以省略头结点指针D.顺序访问相邻结点更灵活
A(12)若list是某带头结点的循环链表的头结点指针,则该链表最后那个链结点的指针域中存
放的是——。
A.1ist的地址B.1ist的内容
C.1ist指的链结点的值D.链表第一个链结点的地址
D(13)若list是某带头结点的循环链表的头结点指针,当p(p与list同类型)指向链表的最后那
个链结点时,——。
A.该结点的指针域为空B.p为空
C.p的内容与头结点的内容相同D.该链结点指针域内容与list的内容相同
A(14)若listl和list2分别为一个单链表与一个双向链表的第一个结点的指针,则——。
A.1ist2比listl占用更多的存储单元B.1istl与list2占用相同的存储单元
C.1istl和list2应该是相同类型的指针变量D.双向链表比单链表占用更多的存储单元
A(15)在表达式中,符号p->link表示——。
A.p所指的链结点的指针域(位置)
B.p所指的链结点的指针域的内容
C.p所指的链结点的下一个链结点的地址
D.p所指的链结点的下一个链结点的地址(出现在表达式中)
B(16)在一个具有n个链结点的线性链表中查找某一个链结点,若查找成功,需要平均比较
——个链结点。
A.nB.n/2C.(n+1)/2D.(n-1)/Q
B(17)从一个具有n个链结点的有序线性链表(即链结点按照数据域值有序链接)中插入一个
新的链结点,并且仍然保持链表有序的时间复杂度为——。
A.O
(1)B.O(n)C.O(n
(2))D.O(log2(n))
B(18)给定具有n个元素的顺序表,建立一个有序线性链表的时间复杂度为——。
A.O
(1)B.O(n)C.O(n
(2))D.O(log2(n))
B(19)在非空线性链表中由p所指的链结点后面插入一个由q所指的链结点的过程是依次执
行——。
A.q->link=p;p->link=q;B.q->link=p->link;p->link=q;
C.q->link=p->link;p=q;D.p->link=q;q->link=p;
C(20)若删除非空线性链表中由p所指的链结点的直接后继链结点的过程是依次执行
________.
A.r=p->link;p->link=r;free(r);
B.r=p->link;p->link=r->link;free(r);
C.r=p->link;p->link=r->link;free(p);
D.p->link=p->link->link;free(p);
B(21)在非空双向循环链表中由q所指的链结点后面插入一个由p所指的链结点的动作依次
为:
p->llink=Q;p->rlink=q->rlink;q->rlink=p;——。
(空白处为一条赋值
语句)
A.q->llink=pB.q->rlink->llink=p
C.p->fiink->llink=pD.p->llink->llink=p
B(22)在非空双向循环链表中由q所指的那个链结点前面插入一个p所指的链结点的动作对
应的语句依次为:
p->rlink(右边)=Q;p->llink(左边)=q->llink;q->[1ink=p;——。
(空白
处为一条赋值语句)
A.q->rlink=p;B.q->llink->rlink=p;
C.p->rlink->rlink=p;D.p->llink->rlink=p;
A(23)在包含有1000个数据元素的线性表中实现如下四个操作,所需要的执行时间最长的是
一O
A.线性表采用顺序存储结构,在第10个元素后面插入一个新的元素
需要移动的元素(1000-10+1)
B.线性表采用链式存储结构,在第10个元素后面插入一个新的元素(10)
C.线性表采用顺序存储结构,删除第990个元素(1000-990)
D.线性表采用链式存储结构,删除p所指的链结点
2.3填空题。
(1)顺序表是一种顺序存储线性表。
(2)在程序设计中,描述线性表的顺序存储结构一般都用数组。
(3)在顺序表情况下,删除线性表中一个数据元素平均要移动表中近一半的元素。
(4)在顺序表的尾部第n+1处插入一个新的数据元素不必移动任何元素。
(5)若长度为n的线性表采用顺序存储结构,在其第i个位置(1≤i≤n+1)插入一个新的数据
元素,当不溢出时,首先移动I到n之间的元素,然后在第i的位置写上新元素,最后返回前,线性表长度加1。
(6)若长度为n的线性表采用顺序存储结构,删除其第i个元素(1≤i≤n),首先将i+1到n移动,然后长度加1。
(7)若长度为n的线性表采用顺序存储结构,插入或删除一个元素的时间复杂度为O(n)。
(8)若某线性表采用顺序存储结构,每个元素占4个存储单元,首地址为100,则第12个元素的存储地址为144。
=100+4*(12-1)
(9)线性表的链式存储结构主要包括单链表、双向链表和单向循环链表三种形式。
(10)线性表的顺序存储结构是通过数组来直接反映数据元素之间的逻辑关系,而链式存
储结构则是通过指针间接反映数据元素之间的逻辑关系。
(11)根据链数率的多少,可以将链表分为线性链表(单链表)与双向链表。
(12)若对线性表进行的操作主要不是插入和删除,则该线性表宜采用顺序存储结构,若
频繁地对线性表进行插入和删除操作,则该线性表宜采用链式存储结构。
(13)删除由list所指的线性链表的第一个链结点是执行操作r=list->next;list->next=r->next;free(r)。
(14)删除非空线性链表中由q所指的链结点(其直接前驱结点由r指出)的动作是执行语句
r->next=q->next和free(q)。
(15)在线性链表中由q所指的链结点后面插入一个地址为p的新结点的过程是依次执行操
作p->next=q->next和q->next=p。
(16)若p为指向循环链表中某链结点的指针变量,判断循环链表是否只有一个链结点的标志是head->next=head。
(17)删除非空双向链表中由q所指的链结点的过程是执行语句q->prior->next=q->next;q->next->prior=q->prior和free(q)。
(18)在具有n个链结点的链表的已知位置插入一个链结点的时间复杂度为O
(1)。
(19)在具有n个链结点的链表中查找一个链结点的时