第二章 线性表
- 格式:doc
- 大小:72.00 KB
- 文档页数:11
数据结构与算法华东师范大学计算机系杨沛第二章线性表2.1 线性表的基本概念线性表是具有相同数据类型的数据元素的有限序列。
由n(n≥0)个数据元素k0,k1,…,kn-1组成的线性表记为(k0 ,k1 ,…,kn-1),线性表中包含的数据元素的个数n称为线性表的长度(length),称长度为零的线性表为空的线性表(简称为空表)。
相关概念:表头、表尾、前驱、后继有序线性表:数据元素的相对位置与它们的值有联系。
无序线性表:数据元素的相对位置与它们的值没有联系。
第二章线性表例小于20的质数组成的线性表(2,3,5,7,11,13, 17,19);英文字母表也是线性表,表中每个字母是一个数据元素:(A,B,C,……,Z);2.2 顺序表2.2.1 线性表顺序表(sequential list)就是顺序存贮的线性表,即用一组连续的存贮单元依次、连续地存贮线性表中的结点。
如果每个结点占用s个存贮单元,并假设存放结点ki(0≤i≤n-1)的开始地址为loc(k0),则结点ki的地址loc(ki)可表示成Loc(ki) =loc(k0) + i*s。
2.2 顺序表在C 语言中,可用数组表示线性表:#define MAXN 100int list[MAXN];int n;线性表的结点k 0,k 1,…,k n-1依次存放在数组单元list[0],list[1],…,list[n-1]。
2.2.1 线性表最大表长实际表长线性表2.2 顺序表2.2.1 线性表假设s=sizeof(int),则可得到计算ki的地址的公式,因loc(ki)=&list[i],而&list[i]=&list[0]+i·s,故loc(ki)=&list[0]+i·s。
2.2 顺序表2.2.2 顺序表的操作(1)初始化:初始长度置为0即可(n=0;),数组空间在编译时分配。
(2)顺序表的插入:插入算法的C函数SqListInsert():若插入位置i不在可以插入的位置上,即i<0或i>n,则返回0;若n=MAXN,即线性表已满,此时数组list[]没有多余的存贮单元可以存放新结点,则返回-1;若插入成功,则返回12.2 顺序表实际表长(2)顺序表的插入:int SqListInsert(int list[],int*p_n,int i,int x) {int j;if(i<0||i>*p_n)return(0);//i不是合法的插入位置if(*p_len==MAXN)return(-1);//线性表已满2.2 顺序表for(j=*p_n;j>i;j--)list[j]=list[j-1];//结点右移list[i]=x;(*p_n)++;//表长加1return(1);}2.2 顺序表(2)顺序表的插入:对于存放在数组list[]中的、具有n个结点的顺序表,为了把值为x的结点插在表的位置i(0≤i≤n)上,可调用如下的语句:k=SqListInsert(list, &n, i, x);注:结点移动是本算法的关键操作2.2 顺序表(3)顺序表的删除:删除算法的C函数SqListDelete():在具有n个结点的顺序表中,删除第i(0≤i≤n-1)个位置上的结点,使线性表长度减1,若删除位置不合法,即i<0或i≥n,则返回0;若删除位置合法,即0≤i≤n-1,则删除成功,返回1。
第二章线性表练习题一、单选题1.在一个长度为n的顺序存储线性表中,向第i个元素(1≤i≤n+1)之前插入一个新元素时,需要从后向前依次后移( )个元素。
A、n-iB、n-i+1C、n-i-1D、i2.在一个长度为n的顺序存储线性表中,删除第i个元素(1≤i ≤n+1)时,需要从前向后依次前移( )个元素。
A、n-iB、n-i+1C、n-i-1D、i3.在一个长度为n的线性表中顺序查找值为x的元素时,查找时的平均查找长度(即x同元素的平均比较次数,假定查找每个元素的概率都相等)为( )。
A、nB、n/2C、(n+1)/2D、(n-1)/24.在一个单链表HL中,若要向表头插入一个由指针p指向的结点,则执行( )。
A、HL = p; p->next = HL;B、p->next = HL; HL = p;C、p->next = HL; p = HL;D、p->next = HL->next; HL->next = p;5.在一个单链表HL中,若要在指针q所指的结点的后面插入一个由指针p所指的结点,则执行( )。
A、q->next = p->next ; p->next = q;B、p->next = q->next; q = p;C、q->next = p->next; p->next = q;D、p->next = q->next ; q->next = p;6.在一个单链表HL中,若要删除由指针q所指向结点的后继结点,则执行( )。
A、p = q->next ; p->next = q->next;B、p = q->next ; q->next = p;C、p = q->next ; q->next = p->next;D、q->next = q->next->next; q->next = q;7. 下面关于线性表的叙述错误的是()。
(A) 线性表采用顺序存储必须占用一片连续的存储空间(B) 线性表采用链式存储不必占用一片连续的存储空间(C) 线性表采用链式存储便于插入和删除操作的实现(D) 线性表采用顺序存储便于插入和删除操作的实现8、设指针变量p指向单链表中结点A,若删除单链表中结点A,则需要修改指针的操作序列为()。
(A) q=p->next;p->data=q->data;p->next=q->next;free(q);(B) q=p->next;q->data=p->data;p->next=q->next;free(q);(C) q=p->next;p->next=q->next;free(q);(D) q=p->next;p->data=q->data;free(q);9、设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度为()。
(A) O(log2n) (B) O(1) (C) O(n2) (D) O(n)10、设一条单链表的头指针变量为head且该链表没有头结点,则其判空条件是()。
(A) head==0(B) head->next==0(C) head->next==head (D) head!=011.通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着( )。
A.数据元素具有同一特点B.不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致C.每个数据元素都一样D.数据元素所包含的数据项的个数要相等12.链表不具备的特点是( )。
A.可随机访问任一结点B.插入删除不需要移动元素C.不必事先估计存储空间D.所需空间与其长度成正比13.在一个长度为n(n>1)的单链表上,设有头和尾两个指针,执行( )操作与链表的长度有关。
A.删除单链表中的第一个元素B.删除单链表中的最后一个元素C.在单链表第一个元素前插入一个新元素D.在单链表最后一个元素后插入一个新元素14.下述哪一条是顺序存储结构的优点?( )。
A插入运算方便B可方便地用于各种逻辑结构的存储表示C存储密度大D删除运算方便15.下面关于线性表的叙述中,错误的是哪一个?( )。
A线性表采用顺序存储,必须占用一片连续的存储单元B线性表采用顺序存储,便于进行插入和删除操作。
C线性表采用链式存储,不必占用一片连续的存储单元D线性表采用链式存储,便于进行插入和删除操作。
16.线性表是具有n个( )的有限序列。
A.字符B.数据元素C.数据项D.表元素17.在n个结点的线性表的数组实现中,算法的时间复杂度是O(1)的操作是( )。
A.访问第i(1<=i<=n)个结点和求第i个结点的直接前驱(1<i<=n)B.在第i(1<=i<=n)个结点后插入一个新结点C.删除第i(1<=i<=n)个结点D.以上都不对18.下面关于线性表的叙述错误的是()。
(A) 线性表采用顺序存储必须占用一片连续的存储空间(B) 线性表采用链式存储不必占用一片连续的存储空间(C) 线性表采用链式存储便于插入和删除操作的实现(D) 线性表采用顺序存储便于插入和删除操作的实现19.用无头结点链接方式存储的队列,在进行插入运算时( ).A. 仅修改头指针B. 头、尾指针都要修改C. 仅修改尾指针D.头、尾指针可能都要修改20.设指针变量p指向单链表中结点A,若删除单链表中结点A,则需要修改指针的操作序列为()。
(A) q=p->next;p->data=q->data;p->next=q->next;free(q);(B) q=p->next;q->data=p->data;p->next=q->next;free(q);(C) q=p->next;p->next=q->next;free(q);(D) q=p->next;p->data=q->data;free(q);21.设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度为()。
(A) O(log2n) (B) O(1) (C) O(n2) (D) O(n)22. 设一条单链表的头指针变量为head且该链表没有头结点,则其判空条件是()。
(A) head==0 (B) head->next==0(C) head->next==head (D) head!=023.建立一个长度为n的有序单链表的时间复杂度为()(A) O(n) (B) O(1) (C) O(n2)(D) O(log2n)24. 设顺序线性表中有n个数据元素,则删除表中第i个元素需要移动()个元素。
(A) n-i(B) n+l -i (C) n-1-i (D) i25. 设指针变量p指向双向链表中结点A,指针变量s指向被插入的结点X,则在结点A的后面插入结点X的操作序列为()。
(A) p->right=s;s->left=p;p->right->left=s;s->right=p->right;(B) s->left=p;s->right=p->right;p->right=s;p->right->left=s;(C) p->right=s;p->right->left=s;s->left=p;s->right=p->right;(D) s->left=p;s->right=p->right;p->right->left=s;p->right=s;26. 设顺序表的长度为n,则顺序查找的平均比较次数为()。
(A) n (B) n/2 (C) (n+1)/2 (D) (n-1)/227. 设某链表中最常用的操作是在链表的尾部插入或删除元素,则选用下列()存储方式最节省运算时间。
(A) 单向链表(B) 单向循环链表(C) 双向链表(D) 双向循环链表28.设指针q指向单链表中结点A,指针p指向单链表中结点A的后继结点B,指针s指向被插入的结点X,则在结点A和结点B插入结点X的操作序列为()。
(A) s->next=p->next;p->next=-s;(B) q->next=s;s->next=p;(C) p->next=s->next;s->next=p;(D) p->next=s;s->next=q;二、填空题1.在线性表的单链接存储结构中,每个结点包含有两个域,一个叫域,另一个叫域。
2.对于一个长度为n的顺序存储的线性表,在表头插入元素的时间复杂度为,在表尾插入元素的时间复杂度为。
3.对于一个长度为n的单链接存储的线性表,在表头插入元素的时间复杂度为,在表尾插入元素的时间复杂度为。
4.在线性表的顺序存储中,若一个元素的下标为i,则它的前驱元素的下标为,后继元素的下标为。
5.在线性表的单链接存储中,若一个元素所在结点的地址为p,则其后继结点的地址为,若假定p为一个数组a中的下标,则其后继结点的下标为。
6、设指针p指向单链表中结点A,指针s指向被插入的结点X,则在结点A的前面插入结点X时的操作序列为:1) s->next=___________;2) p->next=s;3) t=p->data;4) p->data=___________;5) s->data=t;7.设指针变量p指向双向循环链表中的结点X,则删除结点X需要执行的语句序列为_________________________________________________________(设结点中的两个指针域分别为llink和rlink)。
8.设指针变量p指向双向链表中的结点A,指针变量s指向被插入的结点X,则在结点A的后面插入结点X的操作序列为_________=p;s->right=p->right;__________=s; p->right->left=s;(设结点中的两个指针域分别为left和right)。
9.设顺序线性表中有n个数据元素,则第i个位置上插入一个数据元素需要移动表中_______个数据元素;删除第i个位置上的数据元素需要移动表中_______个元素。