数据结构

两个非递增有序的顺序表可以()成一个非递增有序的顺序表。A、合并B、插入C、删除D、修改

题目

两个非递增有序的顺序表可以()成一个非递增有序的顺序表。

  • A、合并
  • B、插入
  • C、删除
  • D、修改
如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

主文件无序,索引表有序的文件是【】

A.索引顺序文件

B.索引非顺序文件

C.顺序文件

D.散列文件


正确答案:B
[解析]索引文件由索引表和主文件两部分组成,其中索引表是一张指示逻辑记录和物理记录之间对应关系的表.若文件本身不是按关键字顺序排列,则称为索引非顺序文件.

第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题:

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

A.n

B.2n-1

C.2n

D.n-1


参考答案:A

第5题:

设计一个算法,删除递增有序链表中值大于mink且小于maxk的所有元素(mink和maxk是给定的两个参数,其值可以和表中的元素相同,也可以不同 )。


参考答案:
  分别查找第一个值>mink的结点和第一个值 maxk的结点,再修改指针,删除值大于mink且小于maxk的所有元素。
  [算法描述]
  void delete(LinkList &L, int mink, int maxk) {
  p=L->next; //首元结点
  while (p && p->data<=mink)
  { pre=p; p=p->next; } //查找第一个值>mink的结点
  if (p)
  {while (p && p->datanext;
  // 查找第一个值 maxk的结点
  q=pre->next; pre->next=p; // 修改指针
  while (q!=p)
  { s=q->next; delete q; q=s; } // 释放结点空间
  }//if
  }

第6题:

当在一个有序的顺序存储表上查找一个数据时,即可用折半查找,也可用顺序查找,但前者比后者的查找速度()容易

A.必定快

B.不一定

C.在大部分情况下要快

D.取决于表递增还是递减


正确答案:C

第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题:

设顺序表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

第10题:

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

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

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

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

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


参考答案:C

更多相关问题