线性表例题
数据结构习题及答案 (2)
第二章线性表一、选择题1.一个线性表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )(A)110 (B)108(C)100 (D)120参考答案:B2. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动()个元素。
(A)64(B)63 (C)63.5 (D)7参考答案:C3.线性表采用链式存储结构时,其地址()。
(A) 必须是连续的 (B) 部分地址必须是连续的(C) 一定是不连续的 (D) 连续与否均可以参考答案:D4. 在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行()(A)s->next=p;p->next=s; (B) s->next=p->next;p->next=s;(C)s->next=p->next;p=s; (D)p->next=s;s->next=p;参考答案:B5.在一个单链表中,若删除p所指结点的后续结点,则执行()(A)p->next=p->next->next; (B)p=p->next; p->next=p->next->next;(C)p->next=p->next; (D)p =p->next->next;参考答案:A6.下列有关线性表的叙述中,正确的是()(A)线性表中的元素之间隔是线性关系(B)线性表中至少有一个元素(C)线性表中任何一个元素有且仅有一个直接前趋(D)线性表中任何一个元素有且仅有一个直接后继参考答案:A7.线性表是具有n个()的有限序列(n≠0)(A)表元素(B)字符(C)数据元素(D)数据项参考答案:C二、判断题1.线性表的链接存储,表中元素的逻辑顺序与物理顺序一定相同。
()2.如果没有提供指针类型的语言,就无法构造链式结构。
()3.线性结构的特点是只有一个结点没有前驱,只有一个结点没有后继,其余的结点只有一个前驱和后继。
数据结构(线性表)习题与答案
一、单选题1、在长度为n的顺序表中的第i( 1 <= i <= n+1 )个位置上插入一个元素,其算法时间复杂度为()。
A.O(n*n)B.O(log2n)C.O(1)D.O(n)正确答案:D2、在长度为n的顺序表中的第i( 1 =< i <= n+1 )个位置上插入一个元素,需要移动的元素个数为()。
A.iB.n-i+1C.n-i-1D.n-i正确答案:B3、链表不具有的特点是()。
A.插入、删除不需要移动元素B.不必事先估计存储空间C.可随机访问任一元素D.所需存储空间与线性表程度成正比正确答案:C4、在一单链表中,删除指针p所指的后继结点,以下语句正确的是()。
A.p->next=p->next->next; free(p->next);B. p=p->next;C.free(p->next);p->next=p->next->next;D.s=p->next;p->next=s->next;free(s);正确答案:D5、假设删除长度为n的顺序表中的每个元素的概率相同,则删除一个元素平均要移动的元素个数是()。
A.nB.n/2C.(n-1)/2D.(n+1)/2正确答案:C6、设某顺序表中第一个元素的地址是Base,每个结点占m个单元,则第i个结点的地址为()。
A.Base+(i-1)×mB.Base+(i+1)×mC.Base-i×mD.Base+i×m正确答案:A7、长度为n的非空线性表采用顺序存储结构,在表的第i个位置插入一个数据元素,i 的合法值应该是()。
A.1≤i≤n-1B.0≤i≤n+1C.i>0D.1≤i≤n+1正确答案:D解析:一般插入位置从1开始。
8、非空单链表结点结构为【data,next】,若指针p所指结点是尾结点,则()表达式为真。
第二章线性表
第二章线性表第二章线性表一、选择题1.线性表是具有n个__C___的有限序列(n>0)。
A.表元素B.字符C.数据元素D.数据项2.一个顺序表所占用的存储空间大小与___B___无关。
A.表的长度C.元素的类型B.元素的存放顺序D.元素中各字段的类型3.线性表的顺序存储结构是一种__A___。
A.随机存取的存储方式C.索引存取的存储方式B.顺序存取的存储方式D.Hash存取的存储方式4. 若线性表采用顺序存储结构,每个元素占用4 个存储单元,第一个元素的存储地址为100,则第12 个元素的存储地址是__B____。
A.112 B.144 C.148 D.4125. 线性表是__A____。
A.一个有限序列,可以为空B.一个有限序列,不能为空C.一个无限序列,可以为空D.一个无限序列,不能为空6.对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为__C____。
A.O(n)O(n)B.O(n)O(1)C.O(1)O(n)D.O(1)O(1) 7.若长度为n的非空线性表采用顺序存储结构,删除表的第i个数据元素,首先需要移动表中___A____中数据元素。
A.n-i B.n+i C.n-i+1 D.n-i-1 8.对顺序存储的线性表,设其长度为n,在任何位置插入或删除操作都是等概率的。
删除一个元素时平均要移动表中的____C____个元素。
A.n/2 B.(n+1)/2 C.(n-1)/2 D.n 9.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为__C____。
(1≤i≤n+1)A.O(0)B.O(1)C.O(n)D.O(n2)10.线性表中各链接点之间的地址___C____。
A.必须连续B.部分地址必须连续C.不一定连续D.连续与否无所谓11.在n个结点的线性表的数组表示中,算法的时间复杂度是O(1)的操作是_A______。
A.访问第i个结点后插入一个新结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)B.在第i个结点后插入一个新结点(1≤i≤n)C.删除第i 个结点(1≤i≤n)D.以上都不对12.单链表中,增加一个头结点的目的是为了____C_____。
数据结构-线性表习题及解析
线性表典型例题一、单项选择题[例7-1]在数据结构中,与所使用计算机无关的数据叫( ①)结构;链表是一种采用( ②)存储结构存储的线性表;链表适用于( ③)查找;在链表中进行( ④)操作的效率比在线性表中进行该操作的效率高。
①A.存储B.物理C.逻辑D.物理和逻辑②A.顺序B.网状C.星式D.链式③A.顺序B.二分法C.顺序及二分法D.随机④A.二分法查找B.快速查找C.顺序查找D.插入解析:本题考查的是基本概念。
本题答案为:①C;②D;③A;④D。
[例7-2] 链表不具备的特点是( )。
A.插入和删除不需要移动元素B.可随机访问任一结点C.不必预分配空间D.所需空间与其长度成正比解析:线性表可随机访问任一结点,而链表必须从第一个数据结点出发逐一查找每个结点。
本题答案为:B。
[例7-3] 不带头结点的单链表head为空的判定条件是( )。
A.head==NULL B.head_>next==NULLC.head_>next==head D.head!=NULL解析:在不带头结点的单链表head中,head指向第一个数据结点。
空表即该表没有结点,head==NULL表示该单链表为空。
本题答案为:A。
[例7-4] 带头结点的单链表head为空的判定条件是( )。
A.head==NULL B.head—>next==NULLC.head—> next==head D.head!=NULL解析:在带头结点的单链表head中,head指向头结点。
空表即该表只有头结点,head —>next==NULL表示该单链表为空。
本题答案为:B。
[例7-5] 带头结点的循环单链表head中,head为空的判定条件是( )。
A.head==NULL B.head—>next==NULLC.head—> next==head D.head!=NULL解析:在带头结点的循环单链表head中,head指向头结点。
数据结构与算法(线性表)练习题
三、写一个算法合并两个已排序的线性表。
〔用两种方法:数组表示的线性表〔顺序表〕和指针表示的线性表〔链表〕〕要求:1、定义线性表节点的结构,并定义节点的型和位置的型。
2、定义线性表的基本操作3、在1,2的基础上,完成此题。
4、在main 函数中进行测试:先构建两个有序的线性表,然后合并这两个线性表。
四、已知一个单向链表,试给出复制该链表的算法。
要求:1、定义线性表的节点的结构以及节点的型和位置的型。
2、定义线性表的基本操作3、在1,2的基础上,完成此题。
4、在main 函数中进行测试:先构建一个线性表,并定义一个空线性表,然后进行复制。
五、写出从一个带表头的单链表中删除其值等于给定值x 的结点的算法函数:int delete(LIST &L, int x);如果x 在该链表中,则删除对应结点,并返回其在链表中的位置〔逻辑位置,第一个结点的逻辑位置为1〕,否则返回-1。
要求:1、定义线性表的节点的结构以及节点的型和位置的型。
2、定义线性表的基本操作3、在1,2的基础上,完成此题。
4、在main 函数中进行测试:先构建一个线性表,然后调用函数删除值等于给定值的节点。
六、写出一个将两个静态链表〔属于同一个存储池〕合并的算法函数:void Merge(cursor M, cursor N); 合并的方法是将N 链表中的所有结点添加到M 链表的后面,并将N 链表的表头结点添加到空闲结点链表中。
要求:1、定义静态链表的结点的结构以及结点的型SPACE 以及位置〔position 〕和游标〔cursor 〕的型。
2、定义静态链表的基本操作:void Initialize(); 初始化,将所有存储池中的结点设置为空闲;cursor GetNode(); 从空闲链中获取一个结点;void FreeNode(cursor q); 将结点q 加入到空闲链; void Insert ( elementtype x, position p, cursor M ); 在链表M 中的位置为p 的元素后面添加一个值为x 的结点;void Delete (cursor M, position p ); 在链表M 中删除位置为p 的元素的后一个元素。
第二章线性表例题
例3.设有一个顺序表L,其元素为整型数 据,设计一个算法将L中所有小于0的整 数放在前半部分,大于等于0的整数放在 后半部分。
算法思路 从L的两端查找,前端找大于等于0的元素 (位置为i),后端找小于0的元素(位置为 j),然后将两位置的元素交换。
9
Status Move(SqList &L) { ElemType temp; int i=0,j=L.length-1; while( i<j ) { while( i<j && L.elem[ i ]<0) i++; //从前向后找大于等于0的元素 while( i<j && L.elem[ j ]>=0 ) j--; // 从后向前找小于0的元素 if ( i<j ) //交换L.elem[i]和L.elem[j] { temp=L.elem[ i ]; L.elem[ i ]=L.elem[ j ]; L.elem[ j ]=temp; } } 10 }
19
例3:已知非空线性链表L的链结点按结点数 据域值非递减链接,请写一算法,删除链表 中数据域值相同的多余链结点。
算法思路: 算法设置一指针变量p,从链表的第一个链结点开 始到链表最后那个链结点,依次判断当前p指的链 结点与其直接后继结点的值是否相同,若相同, 则删除其后继结点,否则,p移到下一个链结点。
பைடு நூலகம்
线性表链式存储
typedef struct Lnode { elemtype data; // 数据域 struct Lnode *next; // 指针域 }Lnode, *linklist;
15
例1:已知非空线性链表L,请写一逆转该线 性链表的算法。
数据结构--线性表习题及答案
数据结构--线性表习题及答案第⼆章线性表⼀、选择题1、若长度为n的线性表采⽤顺序存储结构,在其第i个位置插⼊⼀个新元素算法的时间复杂度()。
A. O(log2n)B.O(1)C. O(n)D.O(n2)2、若⼀个线性表中最常⽤的操作是取第i个元素和找第i个元素的前趋元素,则采⽤()存储⽅式最节省时间。
A. 顺序表B. 单链表C. 双链表D. 单循环链表3、具有线性结构的数据结构是()。
A. 图B. 树C. ⼴义表D.栈4、在⼀个长度为n的顺序表中,在第i个元素之前插⼊⼀个新元素时,需向后移动()个元素。
A. n-iB. n-i+1C. n-i-1D. i5、⾮空的循环单链表head的尾结点p满⾜()。
A. p->next==headB. p->next==NULLC. p==NULLD. p==head6、链表不具有的特点是()。
A. 可随机访问任⼀元素B. 插⼊删除不需要移动元素C. 不必事先估计存储空间D. 所需空间与线性表长度成正⽐7、在双向循环链表中,在p指针所指的结点后插⼊⼀个指针q所指向的新结点,修改指针的操作是()。
A. p->next=q;q->prior=p;p->next->prior=q;q->next=q;B. p->next=q;p->next->prior=q;q->prior=p;q->next=p->next;C. q->prior=p;q->next=p->next;p->next->prior=q;p->next=q;D. q->next=p->next;q->prior=p;p->next=q;p->next=q;8、线性表采⽤链式存储时,结点的存储地址()。
A. 必须是连续的B. 必须是不连续的C. 连续与否均可D. 和头结点的存储地址相连续9、在⼀个长度为n的顺序表中删除第i个元素,需要向前移动()个元素。
数据结构线性表十道题
线性表,以前交过的十道题1.假设有两个按元素值递增次序排列的线性表,均以单链表形式存储,请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来的两个单链表的结点存放归并后的单链表。
【北京大学1998LinkedList Union(LinkedList la,lb)//la.,lb分别是带头结点的两个单链表的头指针,链表中的元素值按递增序列排列,本算法将两个链表合成一个按元素递减次序排列的单链表。
{pa=la->next;pb=lb->next;//pa,pb分别是链表la和lb的工作指针la->next=null; //la作结果链表的头指针,先将结果链表初始化为空while(pa!=null&&pb!=null) //当两链表均不为空时作if (pa->data<=pb->data){ r=pa->next; //将pa的后结继结点暂存于r。
pa->next=la->next;//将pa结点链于结果表中,同时逆置la->next=pa;pa=r; //恢复pa为当前的比较结点。
}else{ r=pb->next; //将pb的后继结点暂存于r。
pb->next=la->next; //将pb结点链接于结果表中,同时逆置la->next=pb;pb=r; //恢复pb为当前的比较结点。
}while (pa!=null){r=pa->next;pa->next=la->next;la->next=pa;pa=r;}while (pb!=null){r=pb->next;pb->next=la->next;la->next=pb;pb=r;}}2 带头结点且头指针ha和hb的两线性表A和B分别表示两个集合,两表中的元表皆为递增有序,请写一算法求A和B的并集AUB,要求该并集中的元表仍保持递增有序,且要利用A和B的原有结点空间LinkedList Union(LinkedList ha,hb)//线性表A和B代表两个集合,以链式存储结构存储,元素递增有序。
有关线性表的题目及答案
第2章线性表一选择题1.下述哪一条是顺序存储结构的优点?()【北方交通大学 2001 一、4(2分)】A.存储密度大 B.插入运算方便 C.删除运算方便 D.可方便地用于各种逻辑结构的存储表示2.下面关于线性表的叙述中,错误的是哪一个?()【北方交通大学 2001 一、14(2分)】A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
3.线性表是具有n个()的有限序列(n>0)。
【清华大学 1998 一、4(2分)】A.表元素 B.字符 C.数据元素 D.数据项 E.信息项4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
【哈尔滨工业大学 2001 二、1(2分)】A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表5.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。
【南开大学 2000 一、3】A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表6.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( )最节省时间。
A. 单链表B.单循环链表C. 带尾指针的单循环链表D.带头结点的双循环链表【合肥工业大学 2000 一、1(2分)】7.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。
则采用()存储方式最节省运算时间。
【北京理工大学 2000 一、1(2分)】A.单链表 B.双链表 C.单循环链表 D.带头结点的双循环链表8. 静态链表中指针表示的是(). 【北京理工大学 2001 六、2(2分)】A.内存地址 B.数组下标 C.下一元素地址 D.左、右孩子地址9. 链表不具有的特点是()【福州大学 1998 一、8 (2分)】A.插入、删除不需要移动元素 B.可随机访问任一元素C.不必事先估计存储空间 D.所需空间与线性长度成正比10. 下面的叙述不正确的是()【南京理工大学 1996 一、10(2分)】A.线性表在链式存储时,查找第i个元素的时间同i的值成正比B. 线性表在链式存储时,查找第i个元素的时间同i的值无关C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关11. 线性表的表元存储方式有((1))和链接两种。
数据结构(线性表)习题与答案
1、线性表是具有n 个______ 的有限序列。
A.数据项B.字符C.数据元素D.表元素正确答案:C2、线性表是_______。
A.一个无限序列,可以为空B.一个有限序列不可以为空C.一个无限序列,不可以为空D.一个有限序列,可以为空正确答案:D3、关于线性表的正确说法是_______。
A.每一个元素都有一个前驱和一个后继元素B.除第一个元素和最后一个元素外,其余元素有且仅有一个前驱和一个后继元素C.表中元素的排序顺序必须是由小到大或者由大到小D.线性表中至少有一个元素正确答案:B4、线性表采用链表存储时,其存放各个元素的单元地址是_______。
A.连续与否均可以B.部份地址必须是连续的C.一定是不连续的D.必须是连续的5、链表不具备的特点是_______。
A.插入删除不需要挪移元素B.所需空间与其长度成正比C.不必事先估计存储空间D.可随机访问任一节点正确答案:D6、线性表的静态链表存储结构与顺序存储结构相比,优点是_______。
A.所有的操作算法实现简单B.便于利用零散的存储器空间C.便于随机存取D.便于插入和删除正确答案:D7、线性表的顺序存储结构和链式存储结构相比,优点是_______。
A.便于随机存取B.便于插入和删除C.所有的操作算法实现简单D.节省存储空间正确答案:A 8、设线性表有n 个元素,以下操作中,_______在顺序表上实现比在链表上实现效率高。
A.交换第1 个元素第2 个元素的值B.输出与给定值x 相等的元素在线性表中的符号C.输入第i ( 1<=i<=n )个元素值D.顺序输出这n 个元素的值正确答案:C9、对于一个线性表,既要求能够较快地进行插入和删除操作,又要求存储结构能够反映数据元素之间的逻辑关系,则应采用_______ 存储结构。
A.顺序B.链式C.散列D.索引正确答案:B10、设线性表中有n 个元素,以下操作,_______ 在单链表上实现要比在顺序表上实现效率高。
《数据结构》关于线性表的练习题(PPT内含答案)
C.插入删除时不需移动元素
D.所需空间与线性表成正比
7.在( B )的运算中,使用顺序表比链表好。
A.插入
B.根据序号查找
C.删除
D.根据元素查找
8.在单链表指针为p的结点之后插入指针为s的结点,正确 的操作是( B )。
A.p->next=s;s->next=p->next;
B.s->next=p->next;p->next=s;
9.若对一个线性表经常进行查找操作,而很少进行插入和 删除操作时,则采用 顺序 存储结构为宜,相反,若经 常进行的是插入和删除操作时,则采用 链式 存储结构 为宜。
习题2
三、判断题 1.线性表的链式存储结构优于顺序存储结构。( F ) 2.链表的每个结点都恰好包含一个指针域。 ( F ) 3.在线性表的链式存储结构中,逻辑上相邻的两个元素在
B.循环链表和单向链表
C.循环链表
15.对具有n个结点的线性表进行插入或删除操作, 所需的算法时间复杂度为( D )。
A.O(n2) C.O(log2n)
B.O(nlog2n) D.O(n)
习题2
二、填空题
1.线性表L=(a1,a2,…,an)采用顺序存储,假定删除 表中任意元素的概率相同,则删除一个元素平均 需要移动元素的个数是 (n-1)/2 。
习题2
5.链表相对于顺序表的优点是插入、删除方便;缺点是存 储密度 小 。
6.链式存储的特点是利用 指针 来表示数据元素之间的 逻辑关系。
7.在双向链表中,每个结点有两个指针域,一个指向其 前驱结点,另一个指向其 后继 结点。
8.在一个双链表中,设指针p是指向该表中待删除的结点, 则需要执行的操作为: p->pre->next=p->next 。
《数据结构》第二章线性表习题
《数据结构》第二章线性表习题一、单项选择题1. 线性表是________。
A.一个有限序列,可以为空B.一个有限序列,不可以为空C.一个无限序列,可以为空D.一个无限序列,不可以为空2. 在一个长度为n的顺序表中删除第i个元素(0<=i<=n)时,需向前移动个元素。
A.n-i B.n-i+l C.n-i-1 D.i3. 线性表采用链式存储时,其地址________。
A.必须是连续的B.一定是不连续的C.部分地址必须是连续的D.连续与否均可以4. 从一个具有n个结点的单链表中查找其值等于x的结点时,在查找成功的情况下,需平均比较________个元素结点。
A.n/2 B.n C.(n+1)/2 D.(n-1)/25. 在双向循环链表中,在p所指的结点之后插入s指针所指的结点,其操作是____。
A. p->next=s; s->prior=p;p->next->prior=s; s->next=p->next;B. s->prior=p; s->next=p->next;p->next=s; p->next->prior=s;C. p->next=s; p->next->prior=s;s->prior=p; s->next=p->next;D. s->prior=p; s->next=p->next;p->next->prior=s; p->next=s;6. 设单链表中指针p指向结点m,若要删除m之后的结点(若存在),则需修改指针的操作为________。
A.p->next=p->next->next; B.p=p->next; C.p=p->next->next; D.p->next=p;7. 在一个长度为n的顺序表中向第i个元素(0< i<n+l )之前插入一个新元素时,需向后移动______个元素。
线性表习题
填空题
7.带头结点的单链表head为空的判定条件是____。 带头结点的单链表head为空的判定条件是____。 带头结点的单链表head为空的判定条件是____ 8.带头结点的双循环链表 为空表的条件____ 带头结点的双循环链表L ____。 8.带头结点的双循环链表L为空表的条件____。
算法题
算法题
1.设计一个算法,求一个单链表中的结点个数。 1.设计一个算法,求一个单链表中的结点个数。 设计一个算法 2.设计一个算法 设计一个算法, 2.设计一个算法,从右往左打印一个双链表中 各个结点的值。 各个结点的值。 3.设计一个算法 对一个有序的单链表, 设计一个算法, 3.设计一个算法,对一个有序的单链表,删除 所有值大于x而不大于y的结点。 所有值大于x而不大于y的结点。 4.设计一个算法 设计一个算法, 4.设计一个算法,判断一个单链表中的各个结 点值是否有序。 点值是否有序。
1.已知一个顺序表A,其中的元素按值非递减有 已知一个顺序表A 已知一个顺序表 序排列,编写一个函数插入一个元素x 序排列,编写一个函数插入一个元素x后保持 该顺序表仍按递减有序排列。 该顺序表仍按递减有序排列。 2.从顺序表中删除所有值为 的元素。 从顺序表中删除所有值为x 2.从顺序表中删除所有值为x的元素。 3.编写一个函数从一给定的顺序表 编写一个函数从一给定的顺序表A 3.编写一个函数从一给定的顺序表A中删除元素 值在x 值在x到y(x≤y)之间的所有元素,要求以较 y 之间的所有元素, 高的效率来实现。 高的效率来实现。 4.用顺序表表示集合 实现集合的求并集运算。 用顺序表表示集合, 4.用顺序表表示集合,实现集合的求并集运算。
填空题
1.下面程序的时间复杂度为 下面程序的时间复杂度为___________。 下面程序的时间复杂度为 for (int i=1; i<=m; i++) for (int j=1; j<=n; j++ ) S+=i ; 2.在长度为n的顺序表的第i(1≤i≤n+1)个 在长度为n 在长度为 的顺序表的第i 1≤i≤n+1) 位置上插入一个元素, 位置上插入一个元素,元素的移动次数是 ____________。 ____________。 3.在单链表中 要删除某一指定结点, 在单链表中, 3.在单链表中,要删除某一指定结点,必须找 到该结点的_______的结点。 _______的结点 到该结点的_______的结点。
线性表练习题
读书破万卷下笔如有神第2章线性表一选择题1.下述哪一条是顺序存储结构的优点?( a )【北方交通大学 2001】A.存储密度大 B.插入运算方便 C.删除运算方便D.可方便地用于各种逻辑结构的存储表示2.下面关于线性表的叙述中,错误的是哪一个?( d )【北方交通大学 2001】A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
3.线性表是具有n个( c )的有限序列(n>0)。
【清华大学 1998】A.表元素 B.字符 C.数据元素 D.数据项 E.信息项4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
【哈尔滨工业大学 2001】A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表5.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。
【南开大学 2000】A.单链表 B.仅有头指针的单循环链表 C.双链表D.仅有尾指针的单循环链表6.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( )最节省时间。
【合肥工业大学 2000】A. 单链表B.单循环链表C. 带尾指针的单循环链表D.带头结点的双循环链表7.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。
则采用()存储方式最节省运算时间。
【北京理工大学 2000】A.单链表 B.双链表 C.单循环链表 D.带头结点的双循环链表8. 静态链表中指针表示的是(). 【北京理工大学 2001】A.内存地址 B.数组下标 C.下一元素地址 D.左、右孩子地址】 1998【福州大学)链表不具有的特点是(9.读书破万卷下笔如有神A.插入、删除不需要移动元素 B.可随机访问任一元素C.不必事先估计存储空间 D.所需空间与线性长度成正比10. 下面的叙述不正确的是()【南京理工大学 1996】A.线性表在链式存储时,查找第i个元素的时间同i的值成正比B. 线性表在链式存储时,查找第i个元素的时间同i的值无关C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关11. (1) 静态链表既有顺序存储的优点,又有动态链表的优点。
线性表习题
线性表习题第二章一选择题1.一个线性表第一个元素的存储地址是100,每个元素的长度为4,则第5个元素的地址是( )A.110B.116C.100D.1202. 向一个有128个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动()个元素。
A.64B.63C.63.5D.73.在循环双链表的p所指接点之前插入s所指接点的操作是A.p-> prior =s;s-> next t=p;p-> prior t->left=s;s-> prior =p-> prior;B. p-> prior =s;p-> prior -> next =s;s-> next =p;s-> prior =p-> prior;C.s-> next =p;s-> prior =p-> prior;p-> prior =s;p-> prior -> next =s;D.s-> next =p;s-> prior =p-> prior;p-> prior -> next =s;p-> prior =s;4.从一个具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较()个结点。
A.nB.n/2C.(n-1)/2D.(n+1)/25.线性表是具有n个()的有限序列(n≠0)A.表元素B.字符C.数据元素D.数据项6.非空的循环单链表head的尾结点(由P指向)满足A. p->next=NULLB. p=NULLC. p->next=headD.p=head7.在一个单链表中已知q所指的结点是p所指结点的前驱结点,若在q和p之间插入s 结点,则执行( )A. s->next=p->next;p->next=s;B.p->next=s->next;s->next=p;C. q->next=s;s->next=p;D.p->next=s;s->next=q;8.已知一个顺序存储线性表,若第1个结点的地址d,第3个的地址是5d,则第n个结点的地址为( )A.[2*(n-1)+1]*d B.2*(n-1)*d C.[2*(n-1)-1]*d D.(n+1)*d9.在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是( ) A.O(1) B.O(n) C.O(n2) D.O(nlog2n) 10.如果最常用的操作是提取第i个结点及其前驱,则采用( )存储方式最节省时间。
《数据结构》习题集:第2章_线性表
第2章线性表一、选择题1.表长为N 的顺序表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均次数为(E ),删除一个元素需要移动的元素个数为(A )。
A. (N-1)/2B. NC. N+1D. N-1E. N/2F. (N+1)/2G. (N-2)/22.线性表是具有N 个(C )的有限序列。
A、表元素B、字符C、数据元素D、数据项E、信息3.“线性表的逻辑顺序和物理顺序总是一致的。
”这个结论是(B )。
A、正确的B、错误的C、不一定,与具体结构有关。
4.线性表采用链式存储结构时,要求内存中可用存储单元的地址(D )。
A、必须是连续的B、部分地址必须是连续的C、一定是不连续的D、连续或不连续都可以。
5.带头结点的单链表为空的判定条件是(B )。
A、head==NULLB、head->next==NULLC、head->next==headD、head!=NULL6.不带头结点的单链表head 为空的判定条件是(A )。
A、head==NULLB、head->next==NULLC、head->next==headD、head!=NULL7.非空的循环单链表head 的尾结点P 满足( C )。
A、P->NEXT=NULLB、p=NULLC、p->next==headD、p==head8.在一个具有n 个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是(B )。
A、O(1)B、O(n)C、O(n2)D、O(nlog2n)9.在一个单链表中,若删除P 所指结点的后继结点,则执行( A )。
A、p->next=p->next->nextB、p=p->next;p->next=p->next->nextC、p->next=p->next;D、p=p->next->next;10.在一个单链表中,若在P所指结点之后插入S所指结点,则执行(B )。
线性表编程练习题
1、假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。
请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。
输入: 1 2 5 6 83 4 7 9 10输出: 10 9 8 7 6 5 4 3 2 1测试数据输入:7 9 10 118 12 13 14输出:14 13 12 11 10 9 8 7链表翻转2.带头结点且头指针为ha和hb的两线性表A和B 分别表示两个集合。
两表中的元素皆为递增有序。
请写一算法求A和B的并集AUB。
要求该并集中的元素仍保持递增有序。
且要利用A和B的原有结点空间。
输入: 1 2 5 6 82 5 7 9输出: 1 2 5 6 7 8 9测试数据输入:7 9 10 118 9 10 11输出:7 8 9 10 113. 知L1、L2分别为两循环单链表的头结点指针,m,n分别为L1、L2表中数据结点个数。
要求设计一算法,用最快速度将两表合并成一个带头结点的循环单链表。
4. 顺序结构线性表LA与LB的结点关键字为整数。
LA与LB的元素按非递减有序,线性表空间足够大。
试用类PASCAL语言给出一种高效算法,将LB中元素合到LA中,使新的LA的元素仍保持非递减有序。
高效指最大限度的避免移动元素。
5. 已知不带头结点的线性链表list,链表中结点构造为(data、link),其中data为数据域,link为指针域。
请写一算法,将该链表按结点数据域的值的大小从小到大重新链接。
要求链接过程中不得使用除该链表以外的任何链结点空间。
6. 设L为单链表的头结点地址,其数据结点的数据都是正整数且无相同的,试设计利用直接插入的原则把该链表整理成数据递增的有序单链表的算法。
7. 设 Listhead为一单链表的头指针,单链表的每个结点由一个整数域DATA和指针域NEXT组成,整数在单链表中是无序的。
编一PASCAL 过程,将 Listhead链中结点分成一个奇数链和一个偶数链,分别由P,Q指向,每个链中的数据按由小到大排列。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例1说明在线性表的链式存储结构中,头指针与头结点之间的根本区别;头结点与首元结点的关系。
答:在线性表的链式存储结构中,头指针是指指向链表的指针,若链表有头指针则是链表的头结点的指针,头指针具有标识作用,故常用头指针冠以链表的名字。
头结点是为了操作的统一、方便而设立的,放在第一数据元素结点之前,其数据域一般无意义(当然有些情况下也可存放链表的长度、用作监视哨,等等),有了头结点后,对在第一数据元素结点前插入结点和删除第一结点,其操作与对其它结点的操作就统一了。
而且无论链表是否为空,头指针均不为空。
首元结点也就是第一数据元素结点,它是头结点后边的第一个结点。
例2 为什么在单循环链表中设置尾指针比设置头指针更好?答:尾指针是指指向终端结点的指针,用它来表示单循环链表可以使得查找链表的开始结点和终端结点都很方便,设一个带头结点的单循环链表,其尾指针是rear,则开始结点和终端结点分别为指针rear所指结点的后继结点的后继结点和指针rear所指结点(利用C语言分别描述为rear->next->next和rear,利用标准Pascal语言分别描述为rear↑.next↑.next和rear),查找时间均为O(1)。
若用头指针来表示该链表,则查找时间均为O(n)。
例3请分析含有n个结点的顺序表,在进行插入和删除操作时的时间复杂度,并对计算的结果进行分析,由此可得到线性表的适用范围的什么结论。
解:值得注意的是,插入操作是指在某个元素前面或后面插入,是针对位置的,因此可插入的位置为n+1个,而删除操作是删除线性表中某个位置上的元素,是针对元素的,因此可删除的元素为n个。
设p i为在第i个元素之前插入一个元素的概率,在等概率的条件下,其值为1/(n+1)。
在第i个元素之前插入一个元素需要移动的元素的个数为:n-i+1。
所以,在长度为n的线性表中插入一个元素所需要移动的元素次数的数学期望值(平均次数)为:E in=∑+=+ -11)1 (niiinp=n/2同理,设q i为删除第i个元素的概率,在等概率的条件下,其值为1/n。
删除第i 个元素需要移动的元素的个数为:n-i。
所以,在长度为n的线性表中删除一个元素所需要移动的元素次数的数学期望值(平均次数)为:E del=∑=-niiinq1)(=(n-1)/2由于这两个操作的时间主要消耗在数据元素的移动上,所以插入算法和删除算法的时间复杂度均为:O(n)。
从上述分析可知,在顺序存储结构下,在线性表上插入或删除一个元素时需要平均移动线性表长度一半的元素个数,因此当n的值较大时,在顺序结构下,不宜对它频繁进行插入和删除操作。
附注:分析给定算法的复杂度,是一种常见的题目。
例4请给出线性表的顺序存储和链式存储结构选择的原则。
答:在实际应用中,主要根据具体问题的要求和性质,再结合顺序存储结构和链式存储结构的特点来决定,通常从以下几个方面考虑:(1)存储空间。
顺序存储结构要求事先分配其存储空间(即静态分配),所以难以估计存储空间的大小,估计过大会浪费存储空间,估计过小会造成存储空间的溢出。
链式存储结构的存储空间是动态分配的,只要机器中有空闲空间,就不会造成存储空间的溢出。
另外,还可以从存储密度的角度考虑,存储密度定义为:存储密度=结点数据本身占用的存储量/结点结构占用的存储量一般来说,存储密度越大,存储空间的利用率就越高。
显然,顺序存储结构的存储密度为1,而链式存储结构的存储密度小于1。
(2)运算时间。
顺序存储结构是已知的随机存储结构,便于元素的随机存储,即表中每个元素都可以在O(1)时间复杂度下迅速存取。
而链式存储结构中为了访问一个结点必须从头指针开始顺序查找,时间复杂度为O(n),故对于只进行查找操作而很少进行插入和删除操作的情况,采用顺序存储是比较合适的。
但是,在顺序存储结构上进行元素的插入和删除操作时,则需要大量元素的移动,尤其是线性表较长的情况。
在这种情况下,采用链式存储结构较好,因为在这种存储结构上进行插入和删除操作时,不需要元素的移动而效率较高。
(3)程序设计语言。
在不支持指针的概念和指针类型的程序设计语言中,可以采用静态链表(即利用游标实现)的方法来模拟动态存储结构。
对于问题规模不大的问题,采用静态链表来实现更加方便。
例5假设一个单循环链表,其结点含有三个域pre、data和next,其中data为数据域;pre为指针域,它的值为空指针;next为指针域,它指向后继结点。
请设计一个算法,将此表改成双向循环链表。
解:算法的基本思想是根据已知的单链表,一边复制数据,一边产生双向链表,最后首尾相连。
假设指针head指向链表的头结点。
算法描述如下:A1.//处理头结点[ A1.1. 令指针p指向指针head所指结点的后继结点;A1.2. p.pre←head;A1.3. q←p;A1.4. p←p.next; //指针p指向其所指结点的后继结点]A2.循环:当指针p≠head时,重复执行//修改结点的指针域pre,指针p所指向的结点为需要修改的结点,指针q所指向的结点为其前一结点[ A2.1. p.pre←q;A2.2. q←p; //将指针q指向指针p所指向的结点A2.3. p←p.next;]A3. //处理头结点的pre域head.pre←q;A4.算法结束.附注:本题给出了一种带头结点的双向循环链表的表示和构造方法。
以下例题线性表的遍历及其应用线性表的遍历是一种非常重要的基本运算,线性表的其它许多运算是基于该运算的。
下面举例介绍。
(1)求线性表的长度例7编写一个递归算法,计算并输出单链表的长度。
解:假设单链表不带头结点,结点结构有数据域data和指针域next,则其长度递归定义为:当单链表为空时,其长度为0,否则其长度为:1+除第一个结点外剩余的单链表的长度。
假设list为单链表的头指针,算法描述如下:listlen(p)[ 若 p为空指针,则len←0;否则len←1+listlen(p.next); //p.next是p所指向的结点的下一结点的地址返回len;]prnlen(p)[ x←listlen(p); 输出x;](2)判断线性表是否递增例8假设p是指向一个单链表的头指针,请写一个判断该线性表是否递增的算法。
解:若线性表是递增的,则输出“线性表是递增的”;否则输出“线性表不是递增的”。
算法描述如下:A1.//准备[ A1.1.flag←1;A1.2.令指针q指向指针p所指结点的后继结点;]A2.循环:当 flag为真且链表不结束时,重复执行[ 如果q.data>p.data,则[ p←q; //将p指针指向指针q所指的结点q←q.next; //指针q向下移动,指向其后继结点]否则 flag←0;]A3.如果 flag=1,则输出“线性表是递增的”;否则输出“线性表不是递增的”;A4. 算法结束.(3)线性表的输出基于顺序结构的线性表的输出比较简单,这里就不再赘述了。
下面介绍基于单链表存储结构的线性表的输出。
例9假设la是带头结点的单链表的头指针,试写一个逆序输出线性表的各结点的算法。
解:本题可先将单链表中的数据元素存放到一个数组中,然后逆序输出数组中的元素。
算法描述如下:A1.//准备[ i←0;令指针p指向链表的第一个结点;]A2. 循环:当p≠空指针时,重复执行[ A[i]←p.data; i←i+1; p←p.next;]A3.循环:j以-1为步长,从i-1到0,重复执行 [ 输出A[j];]A4.算法结束.例10给定一个带表头结点的单链表,设head为头指针,结点的数据域为data,其为整型数据元素,next为指针域,试写一个算法完成按递增次序输出单链表中各结点的数据元素,并释放结点所占的存储空间。
要求:不允许使用数组作辅助空间。
解:基本思想是不停的查找单链表中的最小元素,找到后就删除当前结点,直到单链表为空时为止。
这里设变量min存放每一趟的最小值。
令指针s和r分别指向最小值结点及其前驱结点,以便在找到具有最小值的结点后进行删除。
算法描述如下:A1.循环:当head.next≠空指针时,重复执行[ A1.1. 令指针 p指向指针head所指结点的后继结点;A1.2. min←p.data;A1.3. s←p; //令指针s指向指针p所指向的结点A1.4. r←head; //令指针r指向指针head所指向的结点A1.5.//查找具有最小数据元素的结点循环:当p≠空指针时,重复执行[ 如果p.data<min,则[ min←p.data; r←q; s←p;]q←p;p←p.next; //指针p后移一个位置]A1.6. //删除最小数据元素的结点[ A1.6.1. r.next←s.next;A1.6.2. 输出s.data;A1.6.3. 释放指针s所指结点;]]A2.释放头结点;A3.算法结束.3.线性表中结点的插入、删除及其应用线性表的基本运算中,结点的插入与删除是最重要的两种运算,许多算法设计与其有关。
(1)线性表中结点的插入与删除例11已知长度为n的线性表A采用顺序存储结构,请写一个时间复杂度为0(n)、空间复杂度为0(1)的算法,该算法删除线性表中所有值为item的数据元素(O(1)表示算法的辅助空间为常量)。
解:在顺序存储的线性表上删除元素,通常要涉及到一系列元素的移动(若删除第i 个元素,则第i+1至第n个元素要依次前移)。
本题要求删除线性表中所有值为item的数据元素,并未要求元素间的相对位置不变。
因此可以考虑设头尾两个指针(i=1,j=n),从两端向中间移动,凡遇到值为item的数据元素时,直接将右端元素左移至值为item 的数据元素位置。
算法描述如下:A1.//准备[ i←0; j←n-1;]A2.循环:当i<j时,重复执行[ A2.1.循环:当i<j且p[i]≠item时,重复执行i←i+1;A2.2.如果i<j,则[ 循环:当i<j且 p[j]=item时,重复执行j←j-1;]A2.3.如果i<j,则 [ p[i]←p[j]; i←i+1; j←j-1;]]A3. 算法结束.例12已知一个双向循环链表,从第二个结点至表尾递增有序。
试编写一个算法将第一个结点删除并插入表中适当位置,使整个链表递增有序。
设此链表没有头结点。
解:双向循环链表自第二个结点至表尾递增有序,要求将第一结点插入到链表中,使整个链表递增有序。
由于已给条件,故应先将第一结点从链表上摘下来,再将其插入到链表中的相应位置上。
由于是双向链表,不必象单链表那样必须知道要插入结点的前驱结点。
双向循环链表的结点结构定义为:(pre,data,next)。