扬州大学2022年858程序设计与数据结构试题参考答案

扬 州 大 学
2022年硕士研究生招生考试初试试题(A卷)参考答案
科目代码:858 科目名称:程序设计与数据结构 满分:150分

注意:答案为个人自制,非官方答案。

一、应用题

  1. 参考答案
    例如,有一张学生基本信息表,包括学生的学号、姓名、性别、籍贯、专业等。每个学生的基本信息记录对应一个数据元素,学生记录按顺序号排列,形成了学生基本信息记录的线性序列。对于整个表来说,只有一个开始结点(它的前面无记录)和一个终端结点(它的后面无记录),其他的结点则各有一个也只有一个直接前驱和直接后继。学生记录之间的这种关系就确定了学生表的逻辑结构,即线性结构。这些学生记录在计算机中的存储表示就是存储结构。如果用连续的存储单元(如用数组表示))来存放这些记录,则称为顺序存储结构;如果存储单元不连续,而是随机存放各个记录,然后用指针进行链接,则称为链式存储结构。即相同的逻辑结构,可以对应不同的存储结构。

  2. 参考答案
    H(H(T(H(T(H(T(L)))))))。

  3. 参考答案
    (1) 或为空树,或为只有根结点的二叉树。
    (2) 或为空树,或为任一结点至多只有左子树的二叉树。
    (3) 或为空树,或为任一结点至多只有右子树的二叉树。
    (4) 或为空树,或为任一结点至多只有右子树的二叉树。

  4. 参考答案
    (1) 哈夫曼树如下图所示,其编码如下表所示。

    image-20220905103039737

    字母频率哈夫曼编码等长二进制编码
    0.071010000
    0.1900001
    0.0210000010
    0.061001011
    0.3211100
    0.0310001101
    0.2101110
    0.101011111

    (2) 二进制等长编码如上表所示。
    (3) 对于上述两种方案,等长编码的构造显然比哈夫曼编码的构造简单。但是,哈夫曼编码是最优前缀编码,其加权路径长度为2.61,而等长二进制编码的加权路径长度为3。

  5. 参考答案
    (1) 邻接矩阵如下
    { ∞ 4 3 ∞ ∞ ∞ ∞ ∞ 4 ∞ 5 5 9 ∞ ∞ ∞ 3 5 ∞ 5 ∞ ∞ ∞ 5 ∞ 5 5 ∞ 7 6 5 4 ∞ 9 ∞ 7 ∞ 3 ∞ ∞ ∞ ∞ ∞ 6 3 ∞ 2 ∞ ∞ ∞ ∞ 5 ∞ 2 ∞ 6 ∞ ∞ 5 4 ∞ ∞ 6 ∞ } \left\{ \begin{matrix} ∞&4&3&∞&∞&∞&∞&∞ \\ 4&∞&5&5&9&∞&∞&∞\\ 3&5&∞&5&∞&∞&∞&5\\ ∞&5&5&∞&7&6&5&4\\ ∞&9&∞&7&∞&3&∞&∞\\ ∞&∞&∞&6&3&∞&2&∞\\ ∞&∞&∞&5&∞&2&∞&6\\ ∞&∞&5&4&∞&∞&6&∞ \end{matrix} \right\} 4345593555557654973632526546
    (2) 邻接表如下所示
    image-20220905104048342

    (3) 最小生成树如下所示
    image-20220905104203817

  6. 参考答案
    证明:
    假设 n 0 、 n 1 、 n 2 n_0、n_1、n_2 n0n1n2,分别是二叉树中度为0,1,2结点的个数。
    首先由二叉树的性质可得 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1
    又因为二叉树为满二叉树,且有N个结点
    则可得 n 0 + n 1 + n 2 = N n_0+n_1+n_2=N n0+n1+n2=N n 1 = 0 n_1=0 n1=0,即 n 0 = N − n 2 n_0=N-n_2 n0=Nn2
    则可得 2 n 0 = N + 1 2n_0=N+1 2n0=N+1,即 n 0 = ( N + 1 ) / 2 n_0 =(N+1)/2 n0=(N+1)/2

二、算法题

  1. 参考答案

    void Intersection(LinkList &La, LinkList &Lb, LinkList &Lc)
    {
        pa=La->next;
        pb=Lb->next;
        Lc=pc=La; 
        while(pa&&pb) 
        {
            if(pa->data==pb->data) 
            {
                pc->next=pa; pc=pa; pa=pa->next; 
                u=pb; pb=pb->next; delete u; 
            }
            else if (pa->data<pb->data)
            {
                u=pa; pa=pa->next; delete u;
            }
            else 
            {
                u=pb; pb=pb->next; delete u;
            }
        }
        while (pa) 
        {
            u=pa; pa=pa->next; delete u;
        }
        while(pb)
        {
            u=pb; pb=pb->next; delete u;
        }
        pc->next=NULL; 
        delete Lb;
    }
    
  2. 参考答案

    void Inverse(LinkList &L)
    {
        p=L->next;
        L->next=NULL;
        while(p!=NULL)
        {
            q-p->next; 
            p->next=L->next;
            L->next=p; 
            p=q;
        }
    }
    
  3. 参考答案

    (1) 算法实现

    int IsEqual(int a[m][n],int m,int n)
    {   int i,j,k,p;
        for(i=0;i<m;i++)
            for(j=0;j<n-1;j++)
            {
                for(p=j+1;p<n; p++;)//和同行其他元素比较
                    if(a[i][j]==a[i][p])//只要有一个相同,则不是互不相同
                    {           
                        printf("no");
                        return 0;
                    }
                for(k=i+1;k<m;k++)//和第i+1行及以后元素比较
                    for(p=0;p<n;p++)
                    {
                        if(a[i][j]==a[k][p])
                        printf("no");
                        return 0;
                    }   
            }
        printf("yes");
        return 1;
    }
    

    (2) 算法分析

    二维数组中的每一个元素同其他元素都比较一次,数组总计包括m*n个元素,第1个元素同其她m*n-1个元素比较,第2个元素同其它m*n-2个元素比较…第m*n-1个元素同最后一个元素(m*n)比较一次。因此,在元素互不相等的情况下,总的比较次数为:(m*n-1)+(m*n-2)+…+2+1=(m*n)(m*n-1)/2。在存在相同元素的情况下,可能第一次比较时相同,也可能最后一次比较时相同,假设在每个位置上均可能相同,总计包括(m*n-1)个位置,这时的平均比较次数约为(m*n)(m*n-1)/4。因此,算法的时间复杂度是 O ( n 4 ) O(n^4) O(n4)

  4. 参考答案

    int Level(BiTree T)
    {
        num=0;
        if(T)
        {
            InitQueue(Q); 
            EnQueue(Q,T); 
            while(!QueueEmpty(Q))
            {
                DeQueue(Q,p); 
                printf("%d",p->data);//假设值为整数 
                if((p->lchilds&!p->rchild)I1(p->lchild&&p->rchild))
                    num++;
                if(p->lchild) EnQueue(Q,p->lchild);
                if(p->rchild) EnQueue(Q,p->rchild);
            }
        }
        return num;
    }
    
  5. 参考答案

    void Process(int a[],int n)
    {
        low=0;
        high=n-1;
        while(low<high)
        {
            while(low<high&&a[low]<0)//找到从左向右的非负值记录
                low++;
            while(low<high&&a [high]>0)//找到从右向左的负值记录
                high--;
            if(low<high)//如果需要交换,即low<high
            {
                temp=a[low];
                a[low]=a[high];
                a[high]=temp;//交换记录
                low++;//继续向后找
                high--;
        }
    }
    
    
  6. 参考答案

    (1) 算法思想

    • 求出各顶点的人度存人数组indegree[i]中,并将人度为0的顶点人栈。

    • 只要栈不空,则重复以下操作:

      • 将栈顶顶点vi出栈并保存在拓扑序列数组topo中;
      • 对顶点vi的每个邻接点vk的入度减1,如果v的入度变为0,则将vk入栈。
    • 如果输出顶点个数少于AOV网的顶点个数,则网中存在有向环,无法进行拓扑排序,否则拓扑排序成功。

    (2) 算法描述

    //有向图G采用邻接表存储结构
    //若G无回路,则生成c的一个拓扑序列topo[]并返回oK,否则ERROR
    Status TopologicalSort (ALGraph G,int topo [ ])
    {
        FindInDegree(G,indegree);//求出各顶点的入度存入数组indegree中
        InitStack(S);//栈S初始化为空
        for(i=0;i<G.vexnum;++i)
            if(!indegree[i]) Push(s,i);//入度为0者进栈
        m=O;//对输出顶点计数,初始为0
        while(!StackEmpty(S))//栈s非空
        {
            Pop (s,i);//将栈顶顶点vi出栈
            topo [m]=i;//将vi保存在拓扑序列数组topo中
            ++m;//对输出顶点计数
            p=G.vertices[i].firstarc;//p指向vi的第一个邻接点
            while(p!=NULL)
            {
                k=p->adjvex;//vk为vi的邻接点
                --indegree[k] ;//v;的每个邻接点的入度减1
                if(indegree[k]==O) Push(S,k);//若入度减为0,则入栈
                p=p->nextarc;//p指向顶点vi下一个邻接结点
            }
        }
        if(m<G.vexnum)return ERROR;//该有向图有回路
        else return OK;
    }
    

    三、补充说明

    作者:@江上_酒
    扬州大学信息工程学院2022届考研情况分析
    扬州大学858程序设计与数据结构专业课(资料篇)
    扬州大学858程序设计与数据结构专业课(编程题篇)

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
扬州大学2013自动控制理论考研试题a卷是一份自动控制理论的考试试题。根据试题的题号和考查知识点的内容,可以推测这份试题主要涉及自动控制理论的基础知识和应用技能。 具体来说,这份试卷可能涉及以下内容: 1. 自动控制理论的基本概念和原理:线性系统、非线性系统、稳定性分析、鲁棒性等。考生可能需要理解和运用这些概念和原理解决相关问题。 2. 控制系统的数学模型和传递函数:系统的数学建模方法、矩阵理论、拉普拉斯变换等。考生可能需要根据给定的系统模型和传递函数进行分析和设计。 3. 控制系统的性能指标和调节器设计:如超调量、调节时间、稳态误差等。考生可能需要根据给定的性能指标设计合适的控制器。 4. 控制系统的稳定性分析和稳定裕度设计:如幂等性、极点分布、Bode图等。考生可能需要根据给定的稳定条件进行分析和设计。 5. 控制系统的传感器和执行器:如传感器的滞后、死区等、执行器的动态特性等。考生可能需要考虑这些因素对控制系统性能的影响。 6. 控制系统的校正和校正方法:如PID控制器、模型预测控制、自适应控制等。考生可能需要根据给定的校正方法进行控制器设计和调整。 综上所述,扬州大学的2013自动控制理论考研试题a卷涵盖了自动控制理论的基础知识和应用技能,并考察了考生对于控制系统分析、设计和调整的能力。考生需要熟悉相关知识和方法,灵活运用,解决给定的控制问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值