牛客网刷题笔记--链表

来源:互联网 发布:什么是算法的复杂性 编辑:程序博客网 时间:2024/06/05 20:52
1.链表的每个结点中都恰好包含一个指针()
  A.正确
  B.错误答案:B。链表中的结点可含多个指针域,分别存放多个指针。例如,双向链表中的结点可以含有两个指针域,分别存放指向其直接前趋和直接后继结点的指针。2.在需要经常查找结点的先驱与后继的场合中,使用(  )比较合适。
  A.单链表
  B.双向链表
  C.循环链表
  D.链栈答案:B。链栈即为栈的链式存储结构3.已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是(    )。 
  A.head(tail(head(tail(LS)))
  B.head(tail(LS))
  C.head(tail(tail(head(LS))))
  D.tail(head(LS))答案:A.
根据表头、表尾的定义可知:任何一个非空广义表的表头是表中第一个元素,它可以是原子,也可以是子表,而其表尾必定是子表。也就是说,广义表的head操作,取出的元素是什么,那么结果就是什么。但是tail操作取出的元素外必须加一个表——“ ()“
已知广义表LS=((a,b,c),(d,e,f))
故: tail(LS)=((d,e,f))
      head(tail(LS))=(d,e,f)
      tail(head(tail(LS)))=(e,f)
      head(tail(head(tail(LS))))=e
广义表:http://blog.csdn.net/fanzheng220112583/article/details/7719228★一个非空广义表的表头()
  A.一定是子表
  B.一定是原子
  C.不能是子表
  D.可以是原子,也可以是子表答案:D。表头可以是原子或子表,表尾一定是子表★若广义表A满足Head(A) = Tail (A), 则A为 
  A.(  )
  B.( ( ) )
  C.( ( ), ( ) )
  D.( ),( ),( ))
答案:B。广义表第一个元素是表头,其余元素是表尾,如果只有一个元素,那么表尾为空即(),B中head(A)=();tail(A)=();
但是在选项C中,head(A)=();tail(A)=(()); D中head(A)=);tail(A)=((),());
所以重点是求表尾时不要遗忘最外面的那一层括号

4.在长度为n的顺序表的第i(1in+1)个位置上插入一个元素,元素的移动次数为(     )
  A.n-i+1
  B.n-i
  C.i

  D.i-1答案:A5. 线性表中每个元素都有一个直接前驱和一个直接后继()
  A.对
  B.错答案:B.线性结构的基本特征为:A.集合中必存在唯一的一个“第一元素”;B.集合中必存在唯一的一个 “最后元素”  ;C.除最后一个元素之外,均有 唯一的后继(后件);D.除第一个元素之外,均有 唯一的前驱(前件)。6.设带有头结点的单向循环链表的头指针变量为head,则其判空条件是()。
  A.head==0
  B.head->next==0
  C.head->next==head  
  D.head!=0答案:C。带头结点单向链表的判空条件是head.next==null; 带头结点的单向循环链表的判空条件是head.next==head; 7.在双向链表中指针p的结点前插入一个指针q的结点操作是()
  A.p->Llink=q;q->Rlink=p;p->Llink->Rlink=q;q->Llink=q;
  B.p->Llink=q;p->Llink->Rlink=q;q->Rlink=p;q->Llink=p->Llink;
  C.q->Rlink=p;q->Llink=p->Llink;p->Llink->Rlink=q;p->Llink=q;

  D.q->Llink=p->Llink;q->Rlink=q;p->Llink=q;p->Llink=q;答案:C8.集合与线性表的区别在于是否按关键字排序()
  A.对
  B.错答案:B。线性表不一定按关键字排序;集合没有顺序

9.下列叙述哪些是对的?(多选)
  A.线性表的逻辑顺序与物理顺序总是一致的。
  B.线性表的顺序存储表示优于链式存储表示。
  C.线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。
  D.二维数组是每个元素都为顺序表的顺序表 .
  E.每种数据结构都应具备三种基本运算:插入、删除和搜索答案:CD。关于E选项,栈就没有搜索操作。顺序表:顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。10.若某线性表最常用得操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用哪种存储方式最节省时间?
  A.顺序表
  B.双链表
  C.带头结点的双循环链表
  D,单循环链表答案:A11.用邻接表表示图进行深度优先遍历时,通常是采用()来实现算法的。
  A.栈
  B.队列
  C.树
  D.图答案:A。深度遍历用栈,广度遍历用队列。《大话数据结构》P238

12.下列算法的功能是什么?
/*L是无头节点单链表*/
LinkList Demo(LinkList L){
     ListNode *Q,*P;
     if(L&&L->next){
         Q=L;
         L=L->next;
         P=L;
         while(P->next)
             P=P->next;
         p->next=Q;
     }
     return L;
}
  A.遍历链表
  B.链表深拷贝
  C.链表反转
  D.单链表转变为循环链表答案:D。先Q=L,然后从头开始遍历链表,到最后一个结点时,它的指针指向第一个结点,p->next=Q。

13.在有n个结点的二叉链表中,值为非空的链域的个数为( )。
  A.n-1
  B.2n-1
  C.n+1
  D.2n+1答案:A
有n个结点的二叉链表中,链域一共有2*n个(每个点有两个链域)。对于除了根结点以外的每个点都是有一个父亲结点,所以一共有n-1个指针指向某个结点,于是形成n-1个非空的链域(减1即是父亲结点),一共有2*n-(n-1)=n+1个空链域。
14.有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当二分查找值82为的结点时,__次比较后查找成功。
  A.1
  B.2
  C.4

  D.8答案:C。


15.解析XML时,需要校验节点是否闭合,如必须有与之对应,用()数据结构实现比较好()
  A.链表
  B.树
  C.队列
  D.栈答案:D。在解析XML中,遇到一个<demo>标签(左标签)就入栈,遇到其子标签的左标签(如<subdemo>)同样入栈。遇到右标签(如</subdemo>或</demo>)就校验栈顶标签是否与该右标签对应,能对应就出栈,不能对应则说明标签不对称,是无效的XML文件(核心是符号匹配问题)。

16.静态链表中指针表示的是()
  A.内存地址
  B.数组下标
  C.下一元素地址
  D.左、右孩子地址答案:B.在静态链表中,每一个结点包含两部分内容,一部分是data(即有意义的数据),另一部分是cur(存储该元素下一个元素所在数组对应的下标)。
动态链表因为是动态申请内存的,所以每个节点的物理地址不连续,要通过指针来顺序访问。
静态链表:http://blog.csdn.net/scu_daiwei/article/details/8511069

17.在一个带头结点的单链表HL中,若要在第一个元素之前插入一个由指针p指向的结点,则执行?

  A.p->next = HI ;p =HL ;
  B.p->next = HL ;HL =p ;
  C.p->next = HL ->next;HL ->next =p;
  D.HL =p; p->next =HL ;答案:C。头指针不是第一个元素,仅仅是一个标志指针

原创粉丝点击