02线性表

  • 格式:doc
  • 大小:68.51 KB
  • 文档页数:3

附作业:一、五、六、七(1、2、5)
习题2

一.名词解释
(1)线性表
(2)顺序表
(3)单链表
(4)双链表
(5)循环链表
(6)存储密度
二.判断题(下列各题,正确的请在前面的括号内打√;错误的打ㄨ)
( )(1)线性表的链式存储结构优于顺序存储。
( )(2)链表的每个结点都恰好包含一个指针域。
( )(3)线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的
特性,因此属于同一数据对象。
( )(4)在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定
紧邻。
( )(5)在单链表中,任何两个元素的存储位置之间都有固定的联系,所以可以从头
结点开始查找任何一个元素。
( )(6)在线性表的顺序结构中,插入和删除元素时,移动元素的个数与该元素的位
置有关。
( )(7)顺序存储方式的优点是存储密度大,插入、删除效率高。
( )(8)在单链表中,要取得某个元素,只要知道该元素的指针即可,因此单链表是
随机存取的存储结构。
( )(9)顺序存储的线性表可以实现随机存取。
( )(10)线性表链式存储的特点是可以用一组任意的存储单元存储表中的数据元素。
三.填空题
1.顺序表中逻辑上相邻的元素在物理位置上 相连。
2.在链表中逻辑上相邻的元素的物理位置 相连。
3.线性表中结点的集合是 ,结点间的关系是 。
4.顺序表相对于链表的优点有 和 。
5.链表相对于顺序表的优点有 和 操作方便;缺点是存储密度 。
6.在n个结点的顺序表中插入一个结点平均需要移动 个结点,具体的移动次数
取决于 。
7.在n个结点的顺序表中删除一个结点平均需要移动 个结点,具体的移动
次数取决于 。
8.在顺序表中访问任意一个结点的时间复杂度均为 。
9.在单链表中除首结点外,任意结点的存储位置都由 结点中的指针指示。
10.在n个结点的单链表中要删除已知结点*p,需要找到 。
其时间复杂度为 。
11.在双链表中要删除已知结点*p,其时间复杂度为 。
12.在单链表中要在已知结点*p之前插入一个新结点,需找到 ,其时
间复杂度为 ;而在双链表中,完成同样操作时其时间复杂度为 。
13.在循环链表中,可根据一个结点的地址遍历整个链表,而单链表中需知道 才
能遍历整个链表。
四.选择题
1.用单链表方式存储的线性表,存储每个结点需要两个域,一个数据域,另一个
是 。
A.当前结点所在地址域 B.指针域 C.空指针域 D.空闲域
2.在具有n个结点的单链表中,实现 的操作,其算法的时间复杂度都是O( n )。
A.遍历链表和求链表的第i个结点 B.在地址为P的结点之后插入一个结点
C.删除开始结点 D.删除地址为P的结点的后继结点
3.设a1,a2,a3为三个结点;p,10,20代表地址,则如下的链表存储结构称为 。

a1 10 a3 ^ a2 20
P

A.链表 B.单链表 C.双向循环链表 D.双向链表
4.单链表的存储密度( )。
A.大于1 B.等于1 C.小于1 D.不能确定
5.已知一个顺序存储的线性表,设每个结点需占m个存储单元,若第一个结点的地址
dal,则第i个结点的地址为( )。
A.da1+(i-1)*m B.dal+i*m C. dal-i*m D.da1+(i+1)*m

6.在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是( )。
A.访问第i个结点(1<=i<=n)和求第i个结点的直接前趋(2<=i<=n)
B.在第i个结点之后插入一个新结点(1<=i<=n)
C.删除第i个结点(1<=i<=n)
D.将n个结点从小到大排序
7.在线性表中( )只有一个直接前趋和一个直接后继。
A.首元素 B.中间元素 C.尾元素 D.所有元素
8.指针P指向循环链表L的首元素的条件是( )。
A.P= = L B.L->next= = P C.P->next= = NULL D.P->next= = L
9.指针P所指的元素是双循环链表L的尾元素的条件是( )。
A.P= = L B.P->Llink= = L C.P= = NULL D.P->Rlink= =L
10.两个指针P和Q,分别指向单链表的两个元素,P所指元素是Q所指元素前趋的条
件是( )。
A.P->next= =Q->next B.P->next= = Q C.Q->next= = P D.P= = Q
五.简答题
1.简述线性表的存储结构及各自的长处。
2.什么是头指针,头结点,开始结点?
3.为什么在单循环链表中设置尾指针比设置头指针更好?
六.下述算法的功能是什么
(1) (2)

七.程序设计题
1.写一个对单循环链表进行遍历(打印每个结点的值)的算法,已知链表中任意结点的
地址为P 。
Node* p;
p=头结点地址;
for(p=p->next;p!=头结点地址;p->next)
printf( p->date)
2.对给定的带头结点的单链表L,编写一个删除L中值为X的结点的直接前趋结点的
算法。
3.将一个顺序表中从第i个结点开始的k个结点删除。
4.有—个单链表(不同结点的数据域值可能相同),其头指针为head,编写一个函数计
算域为x的结点个数。
5.有两个循环单链表,链头指针分别为head1和head2,编写一个函数将链表head1链
接到链表head2,链接后的链表仍是循环链表。
*6.编写一个函数实现两个多项式相加的运算。
设多项式链表结构如下:
struct pnode
{ int coef; //系数
int exp; //指数
struct pnode *link;
}

ListNode *Demo1(LinkList L,ListNode *p) {//L是有头结点的单链表 ListNode *q=L->next; while(q&&q->next!=p) q=q->next; if(q) return q; else Error("*p not in L"); } void Demo2(ListNode *p,ListNode *q)
{//p,*q是链表中的两个结点
DataType temp;
temp=p->data;
p->data=q->data;
q->data=temp;
}