可以将两个非递增有序的线性表()成一个仍然满足非递增有序的线性表。

题目
单选题
可以将两个非递增有序的线性表()成一个仍然满足非递增有序的线性表。
A

合并

B

插入

C

删除

D

修改

如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

下列叙述中正确的是

A) 栈是 “ 先进先出 ” 的线性表

B) 队列是 “ 先进后出 ” 的线性表

C) 循环队列是非线性结构

D) 有序线性表既可以采用顺序 存储 结构,也可以采用链式存储结构


正确答案:D

第2题:

将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中不允许有重复的数据。


参考答案:
  合并后的新表使用头指针Lc指向,pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点,从第一个结点开始进行比较,当两个链表La和Lb均为到达表尾结点时,依次摘取其中较小者重新链接在Lc表的最后。如果两个表中的元素相等,只摘取La表中的元素,删除Lb表中的元素,这样确保合并后表中无重复的元素。当一个表到达表尾结点,为空时,将非空表的剩余元素直接链接在Lc表的最后。
  [算法描述]
  void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc)
  {//合并链表La和Lb,合并后的新表使用头指针Lc指向
  pa=La->next; pb=Lb->next;
  //pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点
  Lc=pc=La; //用La的头结点作为Lc的头结点
  while(pa && pb)
  {if(pa->datadata){pc->next=pa;pc=pa;pa=pa->next;}
  //取较小者La中的元素,将pa链接在pc的后面,pa指针后移
  else if(pa->data>pb->data) {pc->next=pb; pc=pb; pb=pb->next;}
  //取较小者Lb中的元素,将pb链接在pc的后面,pb指针后移
  else //相等时取La中的元素,删除Lb中的元素
  {pc->next=pa;pc=pa;pa=pa->next;
  q=pb->next;delete pb ;pb =q;
  }
  }
  pc->next=pa?pa:pb; //插入剩余段
  delete Lb; //释放Lb的头结点
  }

第3题:

●将两个长度为n的递增有序表归并成一个长度为2n的递增有序表,最少需要进行关键字比较 (38) 次。

(38) A.n

B.n2-1

C.2n-1

D.2n2


正确答案:A
【解析】由于两个表有序,最少比较是一个表的最大结点,比另一个表的所有结点小。如{l,2,3}和{4,5,6}。我们只要将表中第一个结点(最小结点),和另个表中所有结点比较,比较次数为另个表的表长。

第4题:

以下关于线性表和有序表的叙述中正确的是()。

A.线性表中的元素不能重复出现

B.有序表属于线性表的存储结构

C.线性表和有序表都属于逻辑结构

D.有序表可以采用顺序表存储,但线性表不能采用顺序表存储


参考答案:C

第5题:

设顺序表va中的数据元素递增有序。试写一个算法,将x 插入到顺序表的适当位置上,以 保持该表的有序性。


参考答案:struct node intdata; struct node *next; voidinsert(struct node *head,int x)//链表的插入函数 structnode head;struct node (structnode *)malloc(sizeof(struct node)); r->data

第6题:

下列数据结构中,能用二分法进行查找的是( )。

A)顺序存储的有序线性表

B)线性链表

C)二叉链表

D)有序线性表


正确答案:A
要对线性表进行二分法查找,对线性表有两个要求:第一,要求线性表是按顺序方式存储的;第二,要求线性表中的元素是按照从小到大的顺序排好序。

第7题:

将两个非递减的有序链表合并为一个非递增的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中允许有重复的数据。


参考答案:
  合并后的新表使用头指针Lc指向,pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点,从第一个结点开始进行比较,当两个链表La和Lb均为到达表尾结点时,依次摘取其中较小者重新链接在Lc表的表头结点之后,如果两个表中的元素相等,只摘取La表中的元素,保留Lb表中的元素。当一个表到达表尾结点,为空时,将非空表的剩余元素依次摘取,链接在Lc表的表头结点之后。
  [算法描述]
  void MergeList(LinkList& La, LinkList& Lb, LinkList& Lc, )
  {//合并链表La和Lb,合并后的新表使用头指针Lc指向
  pa=La->next; pb=Lb->next;
  //pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点
  Lc=pc=La; //用La的头结点作为Lc的头结点
  Lc->next=NULL;
  while(pa||pb )
  {//只要存在一个非空表,用q指向待摘取的元素
  if(!pa) {q=pb; pb=pb->next;}
  //La表为空,用q指向pb,pb指针后移
  else if(!pb) {q=pa; pa=pa->next;}
  //Lb表为空,用q指向pa,pa指针后移
  else if(pa->data<=pb->data) {q=pa; pa=pa->next;}
  //取较小者(包括相等)La中的元素,用q指向pa,pa指针后移
  else {q=pb; pb=pb->next;}
  //取较小者Lb中的元素,用q指向pb,pb指针后移
  q->next = Lc->next; Lc->next = q;
  //将q指向的结点插在Lc 表的表头结点之后
  }
  delete Lb; //释放Lb的头结点
  }

第8题:

● 将两个长度为n的递增有序表归并成一个长度为2n的递增有序表,最少需要进行关键字比较 (24) 次。

(24) A.1

B.n-1

C.n

D.2n


正确答案:C
【解析】考生首先要明白两个前提:一是要归并的两个表都是递增有序的,且长度都为n,二是题目问的是最少的关键字比较次数,即最好的情况下的比较次数。而最好的情况应该是:一个表的所有关键字都大于(或小于)另一个表的所有关键字,如:(1 2 3 4)与(5 6 7 8)。比较的时候有两个指针分别指向两个表的第一个元素,由于一个表的关键字要都大于另一个表的关键字,所以关键字小的表中的元素挨个与关键字大的表的第一个元素比较后,先被并入到新表中,这时关键字大的表的指针还是指向第一个元素没变,此时只需将关键字大的表复制到新表中即可。所以花费的比较次数就是关键字小的表长,也就是n。

第9题:

将两个各有n个元素的递增有序顺序表归并成一个有序顺序表,其最少的比较次数是()。

A.n

B.2n-1

C.2n

D.n-1


参考答案:A

第10题:

将两个长度为n的递增有序表归并成一个长度为2n的递增有序表,最少需要进行关键字比较(50)次。

A.I

B.n-1

C.n

D.2n


正确答案:C
解析:将两个长度为n的递增有序表归并成一个长度为2n的递增有序表,最少需要进行关键字比较n次,一个递增有序表的最小元素大于等于另一个递增有序表的最大元素。

更多相关问题