一起答

数据结构自考2016年10月真题及答案解析

  • 卷面总分:100分
  • 浏览次数:0
  • 测试费用:免费
  • 答案解析:是
  • 练习次数:18次
  • 作答时间:150分钟
试卷简介

本试卷为单选题型,填空题,算法阅读,算法设计等题型。

  • 单项选择题
  • 填空题
  • 解答题
  • 算法阅读题
  • 算法设计题
部分试题预览
  1. 已知单链表类型定义如下:

    typedef struct node

     { int data;

        struct node *next;

    }ListNode;

    typedef ListNode * List_pt;

    单链表L中结点数不少于2。设计算法判断L中存储的全部n个数据是否是斐波那契序列的前n项。如果是,则函数返回1,否则返回0。函数原型如下:

    int IsF(List_ptr head);    //判定是否是斐波拉契序列

    注:斐波拉契序列的定义为:f0=0,f1=,,fn=fn-1+fn-2 (n≥2)

  2. 阅读程序,回答下列问题。

    int f33( NodeType R[], KeyType k, int n)

    {      int i=n-1, count=1;

           R[0]. key =k;

           while(R[i]. key !=k)

          {     i--;

               count++;

    }

     if(i-==0) return-1;

     else return count;

    }

    (1)变量 count的含义是什么?

    (2)f33的功能是什么?

  3. 已知二叉树的二叉链表类型定义如下,阅读程序,并回答问题。

    typedef char DataType;

    typedef struct node

    {       DataType data;      //data是数据域

           struct node *lchild, *rchild;     //分别指向左、右孩子结点

     }BinTNode;

     typedef BinTNode * BinTree;

     void f31( BinTree bt)

    {       if (bt!=NULL)

        {       printf("%c", bt->data );

                  f31(bt->lchild;

                   printf("%c", bt->data );

         }

    }

    若二叉树如下所示,写出调用f31(T)的输出结果。

  4. 阅读下列程序,写出f32的输出结果。

    void f32()

    { SeqStack *S;

         char x, y;

          Initstack(S);

          x= 'h';

           y= 't';

          Push(S, x);

          Push(S, 'c'):

          x= Pop(S);

          Push(S, x);

           Push(S, y);

          Push(S, 'a');

          Push( S, x )

         while( !StackEmpty(S))

     {    y= Pop(S);

         printf(”%c”,y);

    }

          printf ("%c\n"'!');

    }

  5. 设非空双向循环链表L的头指针为head,表结点类型为DLNode,定义如下。

    typedef int DataType;

    typedef struct dlode

    {   DataType data;    //data是数据域

           struct dlnode * prior, *next;      // prior指向前趋结点,next指向后继结点

     }DLNode;

       typedef DLNode * DLinkList;

    初始时,L中所有结点的prior域均为空(NULL),next域和data域中已经正确赋值。如题30图a所示。

    函数f30完成的功能是:将L中各结点的prior域正确赋值,使L成为双向循环链表。如题30图b所示。

    将空白处应填写的内容答在答题卡上。

    void f30( DLinkList head)

     {    DLNode *p;

           p=head;

           while(p->next!=____(1)____)

         { ____(2)____=p;

             p=p->next;

        }

          ____(3)____=p;

    }

  6. 对于给定的一组关键字序列{26,18,60,65,45,13,32},写出使用直接选择排序方法将其排成升序序列的过程。

  7. 现有5个权值分别是20、31、16、7和15的叶结点,用它们构造一棵哈夫曼树,画出该树。

  8. 对题27图所示的无向带权图G,回答下列问题。

    (1)给出图G的邻接矩阵;

    (2)给出图G的一棵最小生成树。

  9. 线性探查法和拉链法解决的是散列存储中的_______问题。

  10. 对题26图中所给的二叉排序树T回答下列问题。

    (1)给出能生成r的2种关键字插入序列;

    (2)给出r的前序遍历序列。