数据结构(C语言版)(第2版)课后习题答案


    




    数结构(C语言版)(第2版)
    课题答案





    目 录
    第1章 绪 1
    第2章 线性表 5
    第3章 栈队列 13
    第4章 串数组广义表 26
    第5章 树二叉树 33
    第6章 图 43
    第7章 查找 54
    第8章 排序 65

    第1章 绪
    1.简述列概念:数数元素数项数象数结构逻辑结构存储结构抽象数类型
    答案:
    数:客观事物符号表示指输入计算机中计算机程序处理符号总称数学计算中整数实数文编辑字符串媒体程序处理图形图声音动画等通特殊编码定义数
    数元素:数基单位计算机中通常作整体进行考虑处理情况数元素称元素结点记录等数元素完整描述象学生记录树中棋盘格局(状态)图中顶点等
    数项:组成数元素独立含义分割单位例学生基信息表中学号姓名性等数项
    数象:性质相数元素集合数子集例:整数数象集合N{0±1±2…}字母字符数象集合C{A’B’…Z’ a’b’…z’}学生基信息表数象
    数结构:相互间存种种特定关系数元素集合换句话说数结构带结构数元素集合结构指数元素间存关系
    逻辑结构:逻辑关系描述数数存储关独立计算机数逻辑结构作具体问题抽象出数学模型
    存储结构:数象计算机中存储表示称物理结构
    抽象数类型:户定义表示应问题数学模型定义模型组操作总称具体包括三部分:数象数象关系集合数象基操作集合
    2.试举数结构例子叙述逻辑结构存储结构两方面含义相互关系
    答案:
    例张学生基信息表包括学生学号姓名性籍贯专业等学生基信息记录应数元素学生记录序号排列形成学生基信息记录线性序列整表说开始结点(前面记录)终端结点(面记录)结点直接前趋直接继学生记录间种关系确定学生表逻辑结构线性结构
    学生记录计算机中存储表示存储结构果连续存储单元(数组表示)存放记录称序存储结构果存储单元连续机存放记录然指针进行链接称链式存储结构
    相逻辑结构应存储结构
    3.简述逻辑结构四种基关系画出关系图
    答案:
    (1)集合结构
    数元素间属集合关系外关系例确定名学生否班级成员需班级做集合结构
    (2)线性结构
    数元素间存关系例学生信息数入学报时间先序进行排列组成线性结构
    (3)树结构
    数元素间存关系例班级理体系中班长理组长位组长理名组员构成树形结构
    (4)图结构网状结构
    数元素间存关系例位学间朋友关系两位学朋友构成图形结构网状结构
    中树结构图结构属非线性结构

    四类基逻辑结构关系图


    4.存储结构两种基存储方法实现?
    答案:
    (1)序存储结构
    序存储结构助元素存储器中相位置表示数元素间逻辑关系通常助程序设计语言数组类型描述
    (2)链式存储结构
    序存储结构求元素次存放片连续存储空间中链式存储结构需占整块存储空间表示结点间关系需结点附加指针字段存放继元素存储址链式存储结构通常助程序设计语言指针类型描述
    5.选择题
    (1)数结构中逻辑数结构分成( )
    A.动态结构静态结构 B.紧凑结构非紧凑结构
    C.线性结构非线性结构 D.部结构外部结构
    答案:C
    (2)数元素身形式容相位置数关数( )
    A.存储结构 B.存储实现
    C.逻辑结构 D.运算实现
    答案:C
    (3)通常求逻辑结构中数元素具相特性意味着( )
    A.数具特点
    B.仅数元素包含数项数相应数项类型致
    C.数元素样
    D.数元素包含数项数相等
    答案:B
    (4)说法正确( )
    A.数元素数单位
    B.数项数基单位
    C.数结构带结构数项集合
    D.表面相数相逻辑结构
    答案:D
    解释:数元素数基单位数项数单位数结构带结构数元素集合
    (5)算法时间复杂度取决( )
    A.问题规模 B.处理数初态
    C.计算机配置 D.AB
    答案:D
    解释:算法时间复杂度仅问题规模关问题素关某排序算法执行时间排序记录初始状态关时会算法坏均时间复杂度评价
    (6)数结构中( )非线性数结构
    A.树 B.字符串 C.队列 D.栈
    答案:A
    6.试分析面程序段时间复杂度
    (1)x90 y100 
    while(y>0)
    if(x>100)
    {xx10y}
    else x++
    答案:O(1)
    解释:程序执行次数常数阶
    (2)for (i0 ifor (j0 ja[i][j]0
    答案:O(m*n)
    解释:语句a[i][j]0执行次数m*n
    (3)s0
    for i0 ifor(j0 j s+B[i][j]
    sums
    答案:O(n2)
    解释:语句s+B[i][j]执行次数n2
    (4)i1
    while(i ii*3
    答案:O(log3n)
    解释:语句ii*3执行次数 ëlog3nû
    (5)x0
    for(i1 i for (j1 jx++
    答案:O(n2)
    解释:语句x++执行次数n1+n2+……+1 n(n1)2
    (6)xn n>1
    y0
    while(x≥(y+1)* (y+1))
    y++
    答案:O()
    解释:语句y++执行次数 ëû
    第2章 线性表
    1.选择题
    (1)序表中第元素存储址100元素长度2第5元素址( )
    A.110 B.108 C.100 D.120
    答案:B
    解释:序表中数连续存储第5元素址:100+2*4108
    (2)n结点序表中算法时间复杂度O(1)操作( )
    A.访问第i结点(1≤i≤n)求第i结点直接前驱(2≤i≤n)
    B.第i结点插入新结点(1≤i≤n)
    C.删第i结点(1≤i≤n)
    D.n结点排序
    答案:A
    解释:序表中插入or delete结点时间复杂度O(n)排序时间复杂度O(n2)O(nlog2n)序表种机存取结构访问第i结点求第i结点直接前驱直接通数组标直接定位时间复杂度O(1)
    (3) 127元素序表中插入新元素保持原序变均移动 元素数( )
    A.8 B.635 C.63 D.7
    答案:B
    解释:均移动元素数:n2
    (4)链接存储存储结构占存储空间( )
    A.分两部分部分存放结点值部分存放表示结点间关系指针
    B.部分存放结点值
    C.部分存储表示结点间关系指针
    D.分两部分部分存放结点值部分存放结点占单元数
    答案:A
    (5)线性表采链式存储结构时求存中存储单元址( )
    A.必须连续 B.部分址必须连续
    C.定连续 D.连续连续
    答案:D
    (6)线性表L( )情况适链式结构实现
    A.需常修改L中结点值 B.需断L进行删插入
    C.L中含量结点 D.L中结点结构复杂
    答案:B
    解释:链表优点插入删时需移动数直接修改指针
    (7)单链表存储密度( )
    A.1 B.等1 C.1 D.确定
    答案:C
    解释:存储密度指结点数身占存储空间整结点占存储空间假设单链表结点身占空间D指针域占空间N存储密度:D(D+N)定1
    (8)两n元素序表成序表少较次数( )
    A.n B.2n1 C.2n D.n1
    答案:A
    解释:第序表中元素()第二表中元素需第二表中第元素次第表元素较总计较n次
    (9)长度n序表中第i元素(1≤i≤n+1)前插入新元素时须移动( )元素
    A.ni B.ni+1 C.ni1 D.I
    答案:B
    (10) 线性表L(a1a2……an)列说法正确( )
    A.元素直接前驱直接继
    B.线性表中少元素
    C.表中诸元素排列必须
    D.第元素外余元素仅直接前驱直接继
    答案:D
    (11) 创建包括n结点序单链表时间复杂度( )
    A.O(1) B.O(n) C.O(n2) D.O(nlog2n)
    答案:C
    解释:单链表创建时间复杂度O(n)建立序单链表生成新结点时需已结点进行较确定合适插入位置时间复杂度O(n2)
    (12) 说法错误( )
    A.求表长定位两种运算采序存储结构时实现效率采链式存储结构时实现效率低
    B.序存储线性表机存取
    C.序存储求连续存储区域存储理够灵活
    D.线性表链式存储结构优序存储结构
    答案:D
    解释:链式存储结构序存储结构优缺点适场合
    (13) 单链表中s指结点插入p指结点语句应( )
    A.s>nextp+1 p>nexts
    B.(*p)nexts (*s)next(*p)next
    C.s>nextp>next p>nexts>next
    D.s>nextp>next p>nexts
    答案:D
    (14) 双链表存储结构中删p指结点时须修改指针( )
    A.p>next>priorp>prior p>prior>nextp>next
    B.p>nextp>next>next p>next>priorp
    C.p>prior>nextp p>priorp>prior>prior
    D.p>priorp>next>next p>nextp>prior>prior
    答案:A
    (15) 双循环链表中p指针指结点插入q指新结点修改指针操作( )
    A.p>nextq q>priorp p>next>priorq q>nextq
    B.p>nextq p>next>priorq q>priorp q>nextp>next
    C.q>priorp q>nextp>next p>next>priorq p>nextq
    D.q>priorp q>nextp>next p>nextq p>next>priorq
    答案:C
    2.算法设计题
    (1)两递增序链表合递增序链表求结果链表原两链表存储空间 外占存储空间表中允许重复数
    [题目分析]
    合新表头指针Lc指papb分链表LaLb工作指针初始化相应链表第结点第结点开始进行较两链表LaLb均达表尾结点时次摘取中较者重新链接Lc表果两表中元素相等摘取La表中元素删Lb表中元素样确保合表中重复元素表达表尾结点空时非空表剩余元素直接链接Lc表
    [算法描述]
    void MergeList(LinkList &LaLinkList &LbLinkList &Lc)
    {合链表LaLb合新表头指针Lc指
    paLa>next pbLb>next
    papb分链表LaLb工作指针初始化相应链表第结点
    LcpcLa La头结点作Lc头结点
    while(pa && pb)
    {if(pa>datadata){pc>nextpapcpapapa>next}
    取较者La中元素pa链接pc面pa指针移
    else if(pa>data>pb>data) {pc>nextpb pcpb pbpb>next}
    取较者Lb中元素pb链接pc面pb指针移
    else 相等时取La中元素删Lb中元素
    {pc>nextpapcpapapa>next
    qpb>nextdelete pb pb q
    }
    }
    pc>nextpapapb 插入剩余段
    delete Lb 释放Lb头结点
    }
    (2)两非递减序链表合非递增序链表求结果链表原两链表存储空间 外占存储空间表中允许重复数
    [题目分析]
    合新表头指针Lc指papb分链表LaLb工作指针初始化相应链表第结点第结点开始进行较两链表LaLb均达表尾结点时次摘取中较者重新链接Lc表表头结点果两表中元素相等摘取La表中元素保留Lb表中元素表达表尾结点空时非空表剩余元素次摘取链接Lc表表头结点
    [算法描述]
    void MergeList(LinkList& La LinkList& Lb LinkList& Lc )
    {合链表LaLb合新表头指针Lc指
    paLa>next pbLb>next
    papb分链表LaLb工作指针初始化相应链表第结点
    LcpcLa La头结点作Lc头结点
    Lc>nextNULL
    while(pa||pb )
    {存非空表q指摘取元素
    if(pa) {qpb pbpb>next}
    La表空q指pbpb指针移
    else if(pb) {qpa papa>next}
    Lb表空q指papa指针移
    else if(pa>datadata) {qpa papa>next}
    取较者(包括相等)La中元素q指papa指针移
    else {qpb pbpb>next}
    取较者Lb中元素q指pbpb指针移
    q>next Lc>next Lc>next q
    q指结点插Lc 表表头结点
    }
    delete Lb 释放Lb头结点
    }

    (3)已知两链表AB分表示两集合元素递增排列请设计算法求出AB交集存放A链表中
    [题目分析]
    时出现两集合中元素出现结果表中合新表头指针Lc指papb分链表LaLb工作指针初始化相应链表第结点第结点开始进行较两链表LaLb均达表尾结点时果两表中相等元素时摘取La表中元素删Lb表中元素果中表中元素较时删表中较元素表工作指针移链表LaLb达表尾结点空时次删非空表中元素
    [算法描述]
    void Mix(LinkList& La LinkList& Lb LinkList& Lc)
    { paLa>nextpbLb>next
    papb分链表LaLb工作指针初始化相应链表第结点
    LcpcLa La头结点作Lc头结点
    while(pa&&pb)
    { if(pa>datapb>data)∥交集入结果表中
    { pc>nextpapcpapapa>next
    upbpbpb>next delete u}
    else if(pa>datadata) {upapapa>next delete u}
    else {upb pbpb>next delete u}
    }
    while(pa) {upa papa>next delete u}∥ 释放结点空间
    while(pb) {upb pbpb>next delete u}∥释放结点空间
    pc>nextnull∥置链表尾标记
    delete Lb 释放Lb头结点
    }
    (4)已知两链表AB分表示两集合元素递增排列请设计算法求出两集合AB 差集(仅A中出现B中出现元素构成集合)样形式存储时返回该集合元素数
    [题目分析]
    求两集合AB差集指A中删AB中元素删链表中相应结点保存删结点前驱指针pre指前驱结点papb分链表LaLb工作指针初始化相应链表第结点第结点开始进行较两链表LaLb均达表尾结点时果La表中元素Lb表中元素pre置La表工作指针pa删Lb表中元素果中表中元素较时删表中较元素表工作指针移链表LaLb空时次删非空表中元素
    [算法描述]
    void Difference(LinkList& La LinkList& Lbint *n)
    {∥差集结果存储单链表La中*n结果集合中元素数调时0
    paLa>next pbLb>next
    ∥papb分链表LaLb工作指针初始化相应链表第结点
    preLa ∥preLa中pa指结点前驱结点指针
    while(pa&&pb)
    {if(pa>datadata){prepapapa>next*n++}
    ∥ A链表中前结点指针移
    else if(pa>data>q>data)qq>next ∥B链表中前结点指针移
    else {pre>nextpa>next ∥处理AB中元素值相结点应删
    upa papa>next delete u} ∥删结点
    }
    }
    (5)设计算法带头结点单链表A分解两具相结构链表BC中B表结点A表中值零结点C表结点A表中值零结点(链表A中元素非零整数求BC表利A表结点)
    [题目分析]
    B表头结点原A表头结点C表新申请头结点A表第结点开始次取结点p判断结点p值否0利前插法0结点插入B表等0结点插入C表
    [算法描述]
    void DisCompose(LinkedList A)
    { BA
    B>next NULL ∥B表初始化
    Cnew LNode∥C申请结点空间
    C>nextNULL ∥C初始化空表
    pA>next ∥p工作指针
    while(p NULL)
    { rp>next ∥暂存p继
    if(p>data<0)
    {p>nextB>next B>nextp }∥0结点链入B表前插法
    else {p>nextC>next C>nextp }∥等0结点链入C表前插法
    pr∥p指新处理结点
    }
    }

    (6)设计算法通趟遍历单链表中确定值结点
    [题目分析]
    假定第结点中数具值次元素较元素设元素值反复进行较直遍历完该链表
    [算法描述]
    ElemType Max (LinkList L ){
    if(L>nextNULL) return NULL
    pmaxL>next 假定第结点中数具值
    pL>next>next
    while(p NULL ){果结点存
    if(p>data > pmax>data) pmaxp果p值pmax值重新赋值
    pp>next遍历链表
    }
    return pmax>data
    (7)设计算法通遍历趟链表中结点链接方逆转利原表存储空间
    [题目分析]
    首元结点开始逐链表L前结点p插入新链表头部
    [算法描述]
    void inverse(LinkList &L)
    { 逆置带头结点单链表 L
    pL>next L>nextNULL
    while ( p) {
    qp>next q指*p继
    p>nextL>next
    L>nextp *p插入头结点
    p q
    }
    }
    (8)设计算法删递增序链表中值minkmaxk元素(minkmaxk定两参数值表中元素相 )
    [题目分析]
    分查找第值>mink结点第值 ≥maxk结点修改指针删值minkmaxk元素
    [算法描述]
    void delete(LinkList &L int mink int maxk) {
    pL>next 首元结点
    while (p && p>data { prep pp>next } 查找第值>mink结点
    if (p)
    {while (p && p>datanext
    查找第值 ≥maxk结点
    qpre>next pre>nextp 修改指针
    while (qp)
    { sq>next delete q qs } 释放结点空间
    }if
    }
    (9)已知p指双循环链表中结点结点结构datapriornext三域写出算法change(p)交换p指结点前缀结点序
    [题目分析]
    知道双循环链表中结点前驱交换涉四结点(p结点前驱结点前驱前驱结点继结点)六条链
    [算法描述]
    void Exchange(LinkedList p)
    ∥p双循环链表中结点算法p指结点前驱结点交换
    {qp>llink
    q>llink>rlinkp ∥p前驱前驱继p
    p>llinkq>llink ∥p前驱指前驱前驱
    q>rlinkp>rlink ∥p前驱继p继
    q>llinkp ∥p前驱交换
    p>rlink>llinkq ∥p继前驱指原p前驱
    p>rlinkq ∥p继指原前驱
    }∥算法exchange结束
    (10)已知长度n线性表A采序存储结构请写时间复杂度O(n)空间复杂度O(1)算法该算法删线性表中值item数元素
    [题目分析]
    序存储线性表删元素通常涉系列元素移动(删第i元素第i+1第n元素次前移)题求删线性表中值item数元素未求元素间相位置变考虑设头尾两指针(i1jn)两端中间移动遇值item数元素时直接右端元素左移值item数元素位置
    [算法描述]
    void Delete(ElemType A[ ]int n)
    ∥An元素维数组算法删A中值item元素
    {i1jn∥设置数组低高端指针(标)
    while(i {while(i if(i if(i第3章 栈队列
    1.选择题
    (1)元素12345次进栈出栈次序出现( )种情况
    A.54321 B.21543 C.43125 D.23541
    答案:C
    解释:栈进先出线性表难发现C选项中元素1元素2先出栈违背栈进先出原出现C选项示情况
    (2)已知栈入栈序列123…n输出序列p1p2p3…pnp1npi( )
    A.i B.ni C.ni+1 D.确定
    答案:C
    解释:栈进先出线性表栈入栈序列123…n输出序列第元素n说明123…n次性全部进栈进行输出p1np2n1…pini+1
    (3)数组Q[n]表示循环队列f前队列头元素前位置r队尾元素位置假定队列中元素数n计算队列中元素数公式( )
    A.rf B.(n+fr)n C.n+rf D.(n+rf)n
    答案:D
    解释:非循环队列尾指针头指针差值便队列长度循环队列差值负数需差值加MAXSIZE(题n)然MAXSIZE(题n)求余(n+rf)n
    (4)链式栈结点:(datalink)top指栈顶想摘栈顶结点删结点值保存x中应执行操作( )
    A.xtop>datatoptop>link B.toptop>linkxtop>link
    C.xtoptoptop>link D.xtop>link
    答案:A
    解释:xtop>data结点值保存x中toptop>link栈顶指针指栈顶结点摘栈顶结点
    (5)设递算法
            int fact(int n) {  n等0
                 if(n<0) return 1
                 else return n*fact(n1)        }
    计算fact(n)需调该函数次数( ) 
    A. n+1       B. n1      C. n      D. n+2
    答案:A
    解释:特殊值法设n0易知仅调次fact(n)函数选A
    (6)栈 ( )中应
    A.递调 B.函数调 C.表达式求值 D.前三选项
    答案:D
    解释:递调函数调表达式求值均栈进先出性质
    (7)解决计算机机印机间速度匹配问题通常设印数缓区机输出数次写入该缓区印机次该缓区中取出数该缓区逻辑结构应该( )
    A.队列 B.栈 C. 线性表 D.序表
    答案:A
    解释:解决缓区问题应利种先进先出线性表队列正种先进先出线性表
    (8)设栈S队列Q初始状态空元素e1e2e3e4e5e6次进入栈S元素出栈进入Q6元素出队序列e2e4e3e6e5e1栈S容量少应该( )
    A.2 B.3 C.4 D. 6
    答案:B
    解释:元素出队序列e2e4e3e6e5e1知元素入队序列e2e4e3e6e5e1元素出栈序列e2e4e3e6e5e1元素e1e2e3e4e5e6次进入栈易知栈S中时存3元素栈S容量少3
    (9)栈量V[1n]存储初始栈顶指针top设n+1元素x进栈正确操作( )
    A.top++ V[top]x B.V[top]x top++
    C.top V[top]x D.V[top]x top
    答案:C
    解释:初始栈顶指针topn+1说明元素数组量高端址进栈元素存储量空间V[1n]中进栈时top指针先移变n元素x存储V[n]
    (10)设计判表达式中左右括号否配出现算法采( )数结构佳
    A.线性表序存储结构 B.队列
    C 线性表链式存储结构 D 栈
    答案:D
    解释:利栈进先出原
    (11)链接方式存储队列进行删运算时( )
    A 仅修改头指针 B 仅修改尾指针
    C 头尾指针修改 D 头尾指针修改
    答案:D
    解释:般情况修改头指针删队列中元素时队尾指针丢失需队尾指针重新赋值
    (12)循环队列存储数组A[0m]中入队时操作( )
    A rearrear+1 B rear(rear+1)(m1)
    C rear(rear+1)m D rear(rear+1)(m+1)
    答案:D
    解释:数组A[0m]中含m+1元素求模运算时应m+1
    (13)容量n循环队列队尾指针rear队头front队空条件( )
    A (rear+1)nfront B rearfront
    C.rear+1front D (rearl)nfront
    答案:B
    解释:容量n循环队列队满条件(rear+1)nfront队空条件rearfront
    (14)栈队列点( )
    A 先进先出 B 先进出
    C 允许端点处插入删元素 D 没点
    答案:C
    解释:栈允许栈顶处进行插入删元素队列允许队尾插入元素队头删元素
    (15)递算法必须包括( )
    A 递部分 B 终止条件递部分
    C 迭代部分 D 终止条件迭代部分
    答案:B

    2.算法设计题
    (1)编号01两栈存放数组空间V[m]中栈底分处数组两端第0号栈栈顶指针top[0]等1时该栈空第1号栈栈顶指针top[1]等m时该栈空两栈均两端中间增长试编写双栈初始化判断栈空栈满进栈出栈等算法函数双栈数结构定义:
    Typedef struct
    {int top[2]bot[2] 栈顶栈底指针
    SElemType *V 栈数组
    int m 栈容纳元素数
    }DblStack
    [题目分析]
    两栈享量空间两栈栈底设量两端初始时左栈顶指针1右栈顶m两栈顶指针相邻时栈满两栈顶相迎面增长栈顶指针指栈顶元素
    [算法描述]
    (1) 栈初始化
    int Init()
     {Stop[0]1
      Stop[1]m
      return 1 初始化成功
    }
    (2) 入栈操作:
    int push(stk S int iint x)
    ∥i栈号i0表示左栈i1右栈x入栈元素入栈成功返回1失败返回0
    {if(i<0||i>1){ cout<<栈号输入<if(Stop[1]Stop[0]1) {cout<<栈已满<switch(i)
     {case 0 SV[++Stop[0]]x return(1) break
    case 1 SV[Stop[1]]x return(1)
    }
    }∥push
    (3) 退栈操作
    ElemType pop(stk Sint i)
    ∥退栈i代表栈号i0时左栈i1时右栈退栈成功时返回退栈元素
    ∥否返回1
    {if(i<0 || i>1){cout<<栈号输入错误< switch(i)
    {case 0 if(Stop[0]1) {cout<<栈空<else return(SV[Stop[0]])
    case 1 if(Stop[1]m { cout<<栈空<else return(SV[Stop[1]++])
       }∥switch     
    }∥算法结束
    (4) 判断栈空
    int Empty()
    {return (Stop[0]1 && Stop[1]m)
    }
    [算法讨] 
    请注意算法中两栈入栈退栈时栈顶指针计算左栈通常意义栈右栈入栈操作时栈顶指针左移(减1)退栈时栈顶指针右移(加1)

    (2)回文指正读反读均相字符序列abbaabdba均回文good回文试写算法判定定字符量否回文(提示:半字符入栈) 
    [题目分析]
    字符串前半入栈然栈中元素字符串半进行较第出栈元素半串中第字符较相等出栈元素字符较……直栈空结字符序列回文出栈元素串中字符较等时结字符序列回文
    [算法描述]
    #define StackSize 100 假定预分配栈空间100元素
    typedef char DataType假定栈元素数类型字符
    typedef struct
    {DataType data[StackSize]
    int top
    }SeqStack

    int IsHuiwen( char *t)
    {判断t字符量否回文返回1否返回0
    SeqStack s
    int i len
    char temp
    InitStack( &s)
    lenstrlen(t) 求量长度
    for ( i0 iPush( &s t[i])
    while( EmptyStack( &s))
    { 弹出字符相应字符较
    tempPop (&s)
    if( tempS[i])  return 0 等返回0
    else i++

    return 1 较完毕均相等返回 1
    }
    (3)设键盘输入整数序列:a1 a2 a3…an试编写算法实现:栈结构存储输入整数ai≠1时ai进栈ai1时输出栈顶整数出栈算法应异常情况(入栈满等)出相应信息
    [算法描述]
    #define maxsize 栈空间容量
    void InOutS(int s[maxsize])
    s元素整数栈算法进行入栈退栈操作
    {int top0 top栈顶指针定义top0时栈空
    for(i1 i {cin>>x) 键盘读入整数序列
    if(x1) 读入整数等1时入栈
    {if(topmaxsize1){cout<<栈满<else s[++top]x x入栈

    else 读入整数等1时退栈
    {if(top0){ cout<<栈空<else cout<<出栈元素<< s[top]<}
    }算法结束

    (4)键盘输入缀表达式试编写算法计算表达式值规定:逆波兰表达式长度超行符作输入结束操作数间空格分隔操作符+*四种运算例:234 34+2*
    [题目分析]
    逆波兰表达式(缀表达式)求值规:设立运算数栈OPND表达式左右扫描(读入)表达式中扫描数时压入OPND栈扫描运算符时OPND退出两数进行相应运算结果压入OPND栈程直进行读出表达式结束符时OPND栈中数结果
    [算法描述]
    float expr( )
    键盘输入逆波兰表达式’表示输入结束算法求逆波兰式表达式值
    {float OPND[30] OPND操作数栈
    init(OPND) 两栈初始化
    float num00 数字初始化
    cin>>xx字符型变量
    while(x’’)
    {switch
    {case0’while((x>’0’&&x<’9’)||x’’) 拼数
    if(x’’) 处理整数
    {numnum*10+(ord(x)ord(0’)) cin>>x}
    else 处理数部分
    {scale100 cin>>x
    while(x>’0’&&x<’9’)
    {numnum+(ord(x)ord(0’)scale
    scalescale*10 cin>>x }
    }else
    push(OPNDnum) num00数压入栈数初始化
    case x ’break 遇空格继续读字符
    case x+’push(OPNDpop(OPND)+pop(OPND))break
    case x’x1pop(OPND)x2pop(OPND)push(OPNDx2x1)break
    case x*’push(OPNDpop(OPND)*pop(OPND))break
    case x’x1pop(OPND)x2pop(OPND)push(OPNDx2x1)break
    default 符号作处理
    }结束switch
    cin>>x读入表达式中字符
    }结束while(x’)
    cout<<缀表达式值<}算法结束
    [算法讨]假设输入缀表达式正确未作错误检查算法中拼数部分核心遇等0’等9’字符认数种字符序号减字符0’序号出数整数读入数字字符前面部分数10加新读入数新部分数读数点认数整数部分已完接着处理数部分数部分数10(10幂数)变成十分位百分位千分位数等等前面部分数相加拼数程中遇非数字字符表示数已拼完数压入栈中变量num恢复0准备数时新读入字符进入+’’*’’空格判断结束处理数字字符case加入break语句

    (5)假设IO分表示入栈出栈操作栈初态终态均空入栈出栈操作序列表示仅IO组成序列称操作序列合法序列否称非法序列
    ①面示序列中合法?
    A IOIIOIOO B IOOIOIIO C IIIOIOIO D IIIOOIOO
    ②通①分析写出算法判定操作序列否合法合法返回true否返回false(假定判定操作序列已存入维数组中)
    答案:
    ①AD合法序列BC 非法序列
    ②设判定操作序列已存入维数组A中
    int Judge(char A[])
    判断字符数组A中输入输出序列否合法序列返回true否返回false
    {i0 i标
    jk0 jk分I字母O数
    while(A[i]\0’) 未字符数组尾作
    {switch(A[i])
    {caseI’ j++ break 入栈次数增1
    caseO’ k++ if(k>j){cout<<序列非法< }
    i++ A[i]I’O’指针i均移}
    if(jk) {cout<<序列非法< else { cout<<序列合法< }算法结束
    [算法讨]入栈出栈序列(I’O’组成字符串)位置入栈次数(I’数)必须等出栈次数(O’数)否视作非法序列立出信息退出算法整序列(读字符数组中字符串结束标记\0’)入栈次数必须等出栈次数(题目中求栈初态终态空)否视非法序列

    (6)假设带头结点循环链表表示队列设指针指队尾元素站点(注意设头指针) 试编写相应置空队判队空 入队出队等算法
    [题目分析]
    置空队建立头节点头尾指针指头节点头节点存放数判队空头指针等尾指针时队空入队时新节点插入链队列尾部时尾指针指节点出队时删队头节点注意队列长度1等1情况时候注意尾指针修改果等1删尾指针指节点
    [算法描述]
    先定义链队结构
    typedef struct queuenode
    {Datatype data
    struct queuenode *next
    }QueueNode 结点类型定义
    typedef struct
    {queuenode *rear
    }LinkQueue 设指队尾元素指针

    (1) 置空队
    void InitQueue( LinkQueue *Q)
    { 置空队:头结点成队尾元素
     QueueNode *s
    Q>rear Q>rear>next队尾指针指头结点
    while (Q>rearQ>rear>next)队列非空队中元素逐出队
    {sQ>rear>next
    Q>rear>nexts>next
    delete s
     }回收结点空间
    }

    (2) 判队空 
    int EmptyQueue( LinkQueue *Q)
    { 判队空头结点next指针指时空队
     return Q>rear>next>nextQ>rear>next
    }

    (3) 入队
    void EnQueue( LinkQueue *Q Datatype x)
    { 入队尾结点处插入元素
    QueueNode *pnew QueueNode申请新结点
    p>datax p>nextQ>rear>next初始化新结点链入
    Qrear>nextp 
    Q>rearp尾指针移新结点
    }

    (4) 出队
    Datatype DeQueue( LinkQueue *Q)
    {出队头结点元素摘
    Datatype t
    QueueNode *p
    if(EmptyQueue( Q ))
    Error(Queue underflow)
    pQ>rear>next>next p指摘结点
    xp>data 保存结点中数
    if (pQ>rear)
    {队列中结点时p结点出队队尾指针指头结点
     Q>rear Q>rear>next
    Q>rear>nextp>next
    }
    else 
    Q>rear>next>nextp>next摘结点p
    delete p释放删结点
    return x
    }

    (7)假设数组Q[m]存放循环队列中元素 时设置标志tagtag 0tag 1区队头指针(front)队尾指针(rear)相等时队列状态空满试编写结构相应插入(enqueue)删(dlqueue)算法
    [算法描述]
    (1)初始化
    SeQueue QueueInit(SeQueue Q)
    {初始化队列
    QfrontQrear0 Qtag0
    return Q
    }
    (2)入队
    SeQueue QueueIn(SeQueue Qint e)
    {入队列
    if((Qtag1) && (QrearQfront)) cout<<队列已满<else 
    {Qrear(Qrear+1) m
    Qdata[Qrear]e
    if(Qtag0) Qtag1 队列已空
    }
    return Q
    }
    (3)出队
    ElemType QueueOut(SeQueue Q)
    {出队列
    if(Qtag0) { cout<<队列空<else
    {Qfront(Qfront+1) m
    eQdata[Qfront]
    if(QfrontQrear) Qtag0 空队列
    }
    return(e)
    }

    (8)果允许循环队列两端进行插入删操作求:
    ① 写出循环队列类型定义
    ② 写出队尾删队头插入算法
    [题目分析] 维数组 v[0M1]实现循环队列中M队列长度设队头指针 front队尾指针rear约定front指队头元素前位置rear指队尾元素定义frontrear时队空(rear+1)mfront 队满约定队头端入队标方发展队尾端入队标方发展
    [算法描述]

    #define M 队列达长度
    typedef struct
    {elemtp data[M]
    int frontrear
    }cycqueue

    elemtp delqueue ( cycqueue Q)
    Q定义循环队列算法实现队尾删删成功返回删元素否出出错信息
    {if (QfrontQrear) { cout<<队列空<Qrear(Qrear1+M)M 修改队尾指针
    return(Qdata[(Qrear+1+M)M]) 返回出队元素
    }队尾删算法结束

    void enqueue (cycqueue Q elemtp x)
    Q序存储循环队列算法实现队头插入元素x
    {if (Qrear(Qfront1+M)M) { cout<<队满< Qdata[Qfront]x x 入队列
    Qfront(Qfront1+M)M 修改队头指针
    } 结束队头插入算法

    (9)已知Ackermann函数定义

    ① 写出计算Ack(mn)递算法根算法出出Ack(21)计算程
    ② 写出计算Ack(mn)非递算法
    [算法描述]
    int Ack(int mn)
    {if (m0) return(n+1)
    else if(m0&&n0) return(Ack(m11))
    else return(Ack(m1Ack(mm1))
    }算法结束
    ① Ack(21)计算程
    Ack(21) Ack(1Ack(20)) m<>0n<>0
    Ack(1Ack(11)) m<>0n0
    Ack(1Ack(0Ack(10))) m<>0n<>0
    Ack(1Ack(0Ack(01))) m<>0n0
    Ack(1Ack(02)) m0
    Ack(13) m0
    Ack(0Ack(12)) m<>0n<>0
    Ack(0Ack(0Ack(11))) m<>0n<>0
    Ack(0Ack(0Ack(0Ack(10)))) m<>0n<>0
    Ack(0Ack(0Ack(0Ack(01)))) m<>0n0
    Ack(0Ack(0Ack(02))) m0
    Ack(0Ack(03)) m0
    Ack(04) n0
    5 n0

    int Ackerman(int m int n)
    {int akm[M][N]int ij
    for(j0jfor(i1i{akm[i][0]akm[i1][1]
    for(j1jakm[i][j]akm[i1][akm[i][j1]]
    }
    return(akm[m][n])
    }算法结束

    (10)已知f单链表表头指针 链表中存储整型数试写出实现列运算递算法:
    ① 求链表中整数
    ② 求链表结点数
    ③ 求整数均值
    [算法描述]

    int GetMax(LinkList p)
    {
    if(p>next)
    return p>data
    else
    {
    int maxGetMax(p>next)
    return p>data>max p>datamax
    }
    }

    int GetLength(LinkList p)
    {
    if(p>next)
    return 1
    else
    {
    return GetLength(p>next)+1
    }
    }

    double GetAverage(LinkList p int n)
    {
    if(p>next)
    return p>data
    else
    {
    double aveGetAverage(p>nextn1)
    return (ave*(n1)+p>data)n
    }
    }
    第4章 串数组广义表
    1.选择题
    (1)串种特殊线性表特殊性体现( )
    A.序存储 B.数元素字符
    C.链式存储 D.数元素字符
    答案:B
    (2)串面关串叙述中( )正确?
    A.串字符限序列 B.空串空格构成串
    C.模式匹配串种重运算 D.串采序存储采链式存储
    答案:B
    解释:空格常常串字符集合中元素空格组成串成空格串零字符串成空串长度零
    (3)串ababaaababaanext数组( )
    A.012345678999 B.012121111212 C.011234223456 D.0123012322345
    答案:C
    (4)串ababaababnextval( )
    A.010104101 B.010102101 C.010100011 D.010101011
    答案:A
    (5)串长度指( )
    A.串中含字母数 B.串中含字符数
    C.串中含字符数 D.串中含非空格字符数
    答案:B
    解释:串中字符数目称串长度
    (6)假设行序序存储二维数组Aarray[11001100]设数元素占2存储单元基址10LOC[55]( )
    A.808 B.818 C.1010 D.1020
    答案:B
    解释:行序LOC[55][(51)*100+(51)]*2+10818
    (7)设数组A[ij]数组元素长度3字节i值18j值110数组存首址BA开始序存放列存放时元素A[58]存储首址( )
    A.BA+141 B.BA+180 C.BA+222 D.BA+225
    答案:B
    解释:列序LOC[58][(81)*8+(51)]*3+BABA+180
    (8)设10阶称矩阵A采压缩存储方式行序存储a11第元素存储址1元素占址空间a85址( )
    A.13 B.32 C.33 D.40
    答案:C
    (9)n阶称矩阵A行序序方式三角形元素(包括角线元素)次存放维数组B[1(n(n+1))2]中B中确定aij(iA.i*(i1)2+j B.j*(j1)2+i C.i*(i+1)2+j D.j*(j+1)2+i
    答案:B
    (10)二维数组A元素10字符组成串行标i01…8列标j12…10A行先存储元素A[85]起始址A列先存储时元素( )起始址相设字符占字节
    A.A[85] B.A[310] C A[58] D.A[09]
    答案:B
    解释:设数组存首址M开始序存放数组行先存储元素A[85]起始址:M+[(80)*10+(51)]*1M+84数组列先存储易计算出元素A[310]起始址:M+[(101)*9+(30)]*1M+84选B
    (11)设二维数组A[1 m1 n](m行n列)行存储数组B[1 m*n]中二维数组元素A[ij]维数组B中标( )
    A.(i1)*n+j B.(i1)*n+j1 C.i*(j1) D.j*m+i1
    答案:A
    解释:特殊值法取ij1易知A[11]标1四选项中仅A选项确定值1选A
    (12)数组A[041357]中含元素数( )
    A.55 B.45 C.36 D.16
    答案:B
    解释:5*3*345元素
    (13)广义表A(ab(cd)(e(fg)))Head(Tail(Head(Tail(Tail(A)))))值( )
    A.(g) B.(d) C.c D.d
    答案:D
    解释:Tail(A)(b(cd)(e(fg)))Tail(Tail(A))( (cd)(e(fg))) Head(Tail(Tail(A))) (cd)Tail(Head(Tail(Tail(A))))(d)Head(Tail(Head(Tail(Tail(A)))))d
    (14)广义表((abcd))表头( )表尾( )
    A.a B.( ) C.(abcd) D.(bcd)
    答案:CB
    解释:表头非空广义表第元素单原子子表((abcd))表头子表(abcd)表尾表头外余元素构成表表定广义表((abcd))表尾空表( )
    (15)设广义表L((abc))L长度深度分( )
    A.11 B.13 C.12 D.23
    答案:C
    解释:广义表深度指广义表中展开含括号层数广义表长度指广义表中含元素数根定义易知L长度1深度2

    2.应题
    (1)已知模式串tabcaabbabcab’写出KMP法求字符应nextnextval函数值
    答案:
    模式串tnextnextval值:
    j
    1 2 3 4 5 6 7 8 9 10 11 12
    t串
    a b c a a b b a b c a b
    next[j]
    0 1 1 1 2 2 3 1 2 3 4 5
    nextval[j]
    0 1 1 0 2 1 3 0 1 1 0 5

    (2)设目标tabcaabbabcabaacbacba模式pabcabaa
    ① 计算模式pnaxtval函数值
    ② 写出算法画出利KMP算法进行模式匹配时趟匹配程
    答案:
    ① pnextval函数值0110132(pnext函数值0111232)
    ② 利KMP(改进nextval)算法趟匹配程:
    第趟匹配: abcaabbabcabaacbacba
    abcab(i5j5)
    第二趟匹配: abcaabbabcabaacbacba
    abc(i7j3)
    第三趟匹配: abcaabbabcabaacbacba
    a(i7j1)
    第四趟匹配: abcaabbabcabaac bacba
    (成功) abcabaa(i15j8)

    (3)数组A中元素A[ij]长度均32二进位行标19列标111首址S开始连续存放存储器中存储器字长16位求:
    ① 存放该数组需少单元?
    ② 存放数组第4列元素少需少单元?
    ③ 数组行存放时元素A[74]起始址少?
    ④ 数组列存放时元素A[47]起始址少?
    答案:
    元素32二进制位存字长16位元素占2字长行标移111
    (1)242 (2)22 (3)s+182 (4)s+142

    (4)请香蕉banana工具 H( )—Head( )T( )—Tail( )L中取出
    L(apple(orange(strawberry(banana))peach)pear)
    答案:H(H(T(H(T(H(T(L)))))))

    3.算法设计题
    (1)写算法统计输入字符串中字符出现频度结果存入文件(字符串中合法字符AZ26字母0910数字)
    [题目分析] 字母26加数字符号1036设长36整型数组前10分量存放数字字符出现次数余存放字母出现次数字符串中读出数字字符时字符ASCII代码值减数字字符 0’ASCII代码值出数值(09)字母ASCII代码值减字符A’ASCII代码值加10存入数组应标分量中遇符号作处理直输入字符串结束
    [算法描述]
    void Count()
    统计输入字符串中数字字符字母字符数
    {int inum[36]
    char ch
     for(i=0i<36i++)num[i]=0 初始化
     while((ch=getchar())#’) #’表示输入字符串结束
       if(0’   else if(A’ for(i0i<10i++) 输出数字字符数
    cout<<数字< for(i=10i<36i++) 求出字母字符数
    cout<<字母字符<

    (2)写递算法实现字符串逆序存储求设串存储空间
    [题目分析]实现字符串逆置难题求设串存储空间实现字符串逆序存储第输入字符存储输入字符先存储递容易做
    [算法描述]
    void InvertStore(char A[])
    字符串逆序存储递算法
    {char ch
    static int i 0需静态变量
    cin>>ch
    if (ch '') 规定''字符串输入结束标志
    {InvertStore(A)
    A[i++] ch字符串逆序存储
    }
    A[i] '\0' 字符串结尾标记
    }

    (3)编写算法实现面函数功函数void insert(char*schar*tint pos)字符串t插入字符串s中插入位置pos假设分配字符串s空间足够字符串t插入(说明:库函数)
    [题目分析]题字符串插入问题求字符串spos位置插入字符串t首先应查找字符串spos位置第pos字符字符串s尾子串移动字符串t长度然字符串t复制字符串s第pos位置
    插入位置pos验证合法性1串s长度均非法题目假设字符串s空间足够插入必判溢出
    [算法描述]
    void insert(char *schar *tint pos)
    字符串t插入字符串s第pos位置
    {int i1x0 char *ps*qt pq分字符串st工作指针
    if(pos<1) {cout<while(*p’\0’&&i pos串s长度查pos位置时ipos
    if(*p '0') { cout< else 查找字符串尾
    while(*p '0') {p++ i++} 查尾时i字符\0’标p指\0’
    while(*q '\0') {q++ x++ } 查找字符串t长度x循环结束时q指'\0'
    for(jij>pos j){*(p+x)*p p}串spos子串右移空出串t位置
    q 指针q回退串t字符
    for(j1j [算法讨] 串s结束标记('\0')移串t结尾标记应插入s中

    (4)已知字符串S1中存放段英文写出算法format(s1s2s3n)定长度n格式化成两端齐字符串S2 余字符送S3
    [题目分析]题求字符串s1拆分成字符串s2字符串s3求字符串s2定长度n格式化成两端齐字符串长度n首尾字符空格字符算法左右扫描字符串s1找第非空格字符计数n第n拷入字符串s2字符空格然余字符复制字符串s3中
    [算法描述]
    void format (char *s1*s2*s3)
    字符串s1拆分成字符串s2字符串s3求字符串s2长n两端齐
    {char *ps1 *qs2
    int i0
    while(*p '\0' && *p ' ') p++滤掉s1左端空格
    if(*p '\0') {cout<<字符串s1空串空格串< while( *p'\0' && i字符串s1字符串s2中复制
    if(*p '\0'){cout<<字符串s1没< if(*(q)' ' ) 字符空格需找第非空格字符
    {p p指针退
    while(*p' '&&*p'\0') p++查找非空格字符作串s2尾字符
    if(*p'\0')
    {cout< *q*p 字符串s2非空字符
    *(++q)'\0' 置s2字符串结束标记
    }
    *qs3p++ s1串余部分送字符串s3
    while (*p '\0') {*q*p q++ p++}
    *q'\0' 置串s3结束标记
    }

    (5)设二维数组a[1m 1n] 含m*n 整数
    ① 写算法判断a中元素否互相输出相关信息(yesno)
    ② 试分析算法时间复杂度

    [题目分析]判断二维数组中元素否互相逐较找相等元素结互相达元素元素较次次?前行元素行面元素较次(面第循环控制变量pfor循环)然第i+1行行元素较次循环控制变量kp二层for循环
    [算法描述]
    int JudgEqual(ing a[m][n]int mn)
    判断二维数组中元素否互相返回1否返回0
    {for(i0i for(j0j {for(pj+1p if(a[i][j]a[i][p]) {cout< 相结互相
    for(ki+1k for(p0p if(a[i][j]a[k][p]) { cout<} for(j0jcout<}算法JudgEqual结束
    ②二维数组中元素元素较次数组中m*n元素第1元素m*n1元素较第2元素m*n2 元素较……第m*n1元素元素(m*n)较次元素互相等时总较次数 (m*n1)+(m*n2)+…+2+1(m*n)(m*n1)2相元素时第次较相次较时相设(m*n1)位置均相时均较次数约(m*n)(m*n1)4总时间复杂度O(n4)

    (6)设意n整数存放数组A(1n)中试编写算法正数排负数前面(求算法复杂度0(n))
    [题目分析]题属排序问题排出正负排出数组首尾设两指针iji搜索负数停止j搜索正数停止然ij指数交换继续程直 ij止
    [算法描述]
    void Arrange(int A[]int n)
    n整数存数组A中算法数组中正数排负数前面
    {int i0jn1x 类C编写数组标0开始
    while(i{while(i0) i++
    while(i if(i} while(i }算法Arrange结束
    [算法讨]数组中元素较次较次数n佳情况(已排正数前负数)发生交换差情况(负数均正数前面)发生n2次交换类c编写数组界偶0n1空间复杂度O(1)








    第5章 树二叉树
    1.选择题
    (1)棵树转换二叉树棵二叉树形态( )
    A.唯 B.种
    C.种根结点没左孩子 D.种根结点没右孩子
    答案:A
    解释:二叉树左孩子右孩子分棵树转换二叉树棵二叉树形态唯
    (2)3结点构造出少种二叉树?( )
    A.2 B.3 C.4 D.5
    答案:D
    解释:五种情况:

    (3)棵完全二叉树1001结点中叶子结点数( )
    A.250 B. 500 C.254 D.501
    答案:D
    解释:设度0结点(叶子结点)数A度1结点数B度2结点数CAC+1A+B+C10012C+B1000完全二叉树性质B01C整数B0C500A501501叶子结点
    (4)具1025结点二叉树高h( )
    A.11 B.10 C.111025间 D.101024间
    答案:C
    解释:层仅结点树高h1025树高 ëlog21025û + 111h111025间
    (5)深度h满m叉树第k层( )结点(1A.mk1 B.mk1 C.mh1 D.mh1
    答案:A
    解释:深度h满m叉树mh1结点第k层mk1结点
    (6)利二叉链表存储树根结点右指针( )
    A.指左孩子 B.指右孩子 C.空 D.非空
    答案:C
    解释:利二叉链表存储树时右指针指兄弟结点根节点没兄弟结点根节点右指针指空
    (7)二叉树结点1开始进行连续编号求结点编号左右孩子编号结点左右孩子中左孩子编号右孩子编号采( )遍历实现编号
    A.先序 B 中序 C 序 D 根开始层次遍历
    答案:C
    解释:根题意知先左孩子右孩子双亲结点序遍历二叉树序遍历二叉树
    (8)二叉树采二叉链表存储结构交换分支结点左右子树位置利( )遍历方法合适
    A.前序 B.中序 C.序 D.层次
    答案:C
    解释:续遍历层次遍历均实现左右子树交换层次遍历实现消耗续序遍历方法合适
    (9)列存储形式中( )树存储形式?
    A.双亲表示法 B.孩子链表表示法 C.孩子兄弟表示法 D.序存储表示法
    答案:D
    解释:树存储结构三种:双亲表示法孩子表示法孩子兄弟表示法中孩子兄弟表示法常表示法意棵树通孩子兄弟表示法转换二叉树进行存储
    (10)棵非空二叉树先序遍历序列序遍历序列正相反该二叉树定满足( )
    A.结点均左孩子 B.结点均右孩子
    C.叶子结点 D.意棵二叉树
    答案:C
    解释:先序遍历结果中左右序遍历结果左右中没左子树时中右右中没右子树时中左左中结点均左孩子结点均右孩子均AB选结点均左孩子结点均右孩子时均叶子结点选C
    (11)设哈夫曼树中199结点该哈夫曼树中( )叶子结点
    A.99 B.100
    C.101 D.102
    答案:B
    解释:哈夫曼树中没度1结点度0(叶子结点)度2结点设叶子结点数n0度2结点数n2二叉树性质n0n2+1总结点数n n0+n22*n01n0100
    (12)X二叉中序线索树中左孩子结点X根X前驱( )
    A.X双亲 B.X右子树中左结点
    C.X左子树中右结点 D.X左子树中右叶结点
    答案:C
    (13)引入二叉线索树目( )
    A.加快查找结点前驱继速度 B.二叉树中方便进行插入删
    C.方便找双亲 D.二叉树遍历结果唯
    答案:A
    (14)设F森林BF变换二叉树F中n非终端结点B中右指针域空结点( )
    A.n−1 B.n C.n + 1 D.n + 2
    答案:C
    (15)n(n≥2)权值均相字符构成哈夫曼树关该树叙述中错误( )
    A.该树定棵完全二叉树
    B.树中定没度1结点
    C.树中两权值结点定兄弟结点
    D.树中非叶结点权值定层结点权值
    答案:A
    解释:哈夫曼树构造程次选取权值树作左右子树构造棵新二叉树树中定没度1结点两权值结点定兄弟结点非叶结点权值定层结点权值

    2.应题
    (1)试找出满足列条件二叉树
    ① 先序序列序序列相 ②中序序列序序列相
    ③ 先序序列中序序列相 ④中序序列层次遍历序列相
    答案:先序遍历二叉树序根—左子树—右子树中序遍历左子树—根—右子树序遍历序:左子树—右子树―根"根原
    ① 空树根结点二叉树
    ②  空树结点左子树二叉树.
    ③  空树结点右子树二叉树.
    ④ 空树结点右子树二叉树

    (2)设棵二叉树先序序列: A B D F C E G H 中序序列: B F D A G E H C
    ①画出棵二叉树
    ②画出棵二叉树序线索树
    ③棵二叉树转换成应树(森林)
    答案:





    A

    B

    F
    D



    C

    E

    H
    G
     
     
     
     
     
     
     
     
    ① ②

    (3) 假设通信电文仅8字母组成字母电文中出现频率分007019002006032003021010
    ① 试8字母设计赫夫曼编码
    ② 试设计种二进制表示等长编码方案
    ③ 述实例较两种方案优缺点
    答案:方案1哈夫曼编码
    先概率放100倍方便构造哈夫曼树
    w{719263232110}哈夫曼规:[(23)6] (710) ……19 21 32

    (100)
    (40) (60)
    19 21 32 (28)
    (17) (11)
    7 10 6 (5)
    2 3

    0 1
    0 1 0 1
    19 21 32
    0 1
    0 1 0 1
    7 10 6
    0 1
    2 3











    方案较:
    字母编号
    应编码
    出现频率
    1
    000
    007
    2
    001
    019
    3
    010
    002
    4
    011
    006
    5
    100
    032
    6
    101
    003
    7
    110
    021
    8
    111
    010

    字母编号
    应编码
    出现频率
    1
    1100
    007
    2
    00
    019
    3
    11110
    002
    4
    1110
    006
    5
    10
    032
    6
    11111
    003
    7
    01
    021
    8
    1101
    010













    方案1WPL=2(019+032+021)+4(007+006+010)+5(002+003)144+092+025261
    方案2WPL=3(019+032+021+007+006+010+002+003)3
    结:哈夫曼编码优等长二进制编码

     (4)已知列字符ABCDEFG权值分312742811试填写出应哈夫曼树HT存储结构初态终态
    答案:
    初态
     
    weight
    parent
    lchild
    rchild
    1
    3
    0
    0
    0
    2
    12
    0
    0
    0
    3
    7
    0
    0
    0
    4
    4
    0
    0
    0
    5
    2
    0
    0
    0
    6
    8
    0
    0
    0
    7
    11
    0
    0
    0
    8
     
    0
    0
    0
    9
     
    0
    0
    0
    10
     
    0
    0
    0
    11
     
    0
    0
    0
    12
     
    0
    0
    0
    13
     
    0
    0
    0















     

    终态:
     
    weight
    parent
    lchild
    rchild
    1
    3
    8
    0
    0
    2
    12
    12
    0
    0
    3
    7
    10
    0
    0
    4
    4
    9
    0
    0
    5
    2
    8
    0
    0
    6
    8
    10
    0
    0
    7
    11
    11
    0
    0
    8
    5
    9
    5
    1
    9
    9
    11
    4
    8
    10
    15
    12
    3
    6
    11
    20
    13
    9
    7
    12
    27
    13
    2
    10
    13
    47
    0
    11
    12
















    3.算法设计题
    二叉链表作二叉树存储结构编写算法:
    (1)统计二叉树叶结点数
    [题目分析]果二叉树空返回0果二叉树空左右子树空返回1果二叉树空左右子树时空返回左子树中叶子节点数加右子树中叶子节点数
    [算法描述]
    int LeafNodeCount(BiTree T)
    {
    if(TNULL)
    return 0 果空树叶子结点数0
    else if(T>lchildNULL&&T>rchildNULL)
    return 1 判断结点否叶子结点(左孩子右孩子空)返回1
    else
    return LeafNodeCount(T>lchild)+LeafNodeCount(T>rchild)
    }
    (2)判两棵树否相等
    [题目分析]先判断前节点否相等(需处理空否空否相等)果前节点相等直接返回两棵树相等果前节点相等递判断左右孩子否相等
    [算法描述]
    int compareTree(TreeNode* tree1 TreeNode* tree2)
    分治方法做较前根然较左子树右子树
    {bool tree1IsNull (tree1NULL)
    bool tree2IsNull (tree2NULL)
    if(tree1IsNull tree2IsNull)
    {
    return 1
    }
    if(tree1IsNull && tree2IsNull)
    {果两NULL相等
    return 0
    }果根节点相等直接返回相等否话孩子相等相等
    if(tree1>c tree2>c)
    {
     return 1
    }
    return (compareTree(tree1>lefttree2>left)&compareTree(tree1>righttree2>right))
    (compareTree(tree1>lefttree2>right)&compareTree(tree1>righttree2>left))
    }算法结束

    (3)交换二叉树结点左孩子右孩子
    [题目分析]果某结点左右子树空返回否交换该结点左右孩子然递交换左右子树
    [算法描述]
    void ChangeLR(BiTree &T)
    {
    BiTree temp
    if(T>lchildNULL&&T>rchildNULL)
    return
    else
    {
    temp T>lchild
    T>lchild T>rchild
    T>rchild temp
    }交换左右孩子
    ChangeLR(T>lchild) 递交换左子树
    ChangeLR(T>rchild) 递交换右子树
    }
    (4)设计二叉树双序遍历算法(双序遍历指二叉树结点说先访问结点双序遍历左子树然次访问结点接双序遍历右子树)
    [题目分析]树空返回某结点叶子结点仅输出该结点否先输出该结点递遍历左子树输出该结点递遍历右子树
    [算法描述]
    void DoubleTraverse(BiTree T)
    {
    if(T NULL)
    return
    else if(T>lchildNULL&&T>rchildNULL)
    cout<data 叶子结点输出
    else
    {
    cout<data
    DoubleTraverse(T>lchild) 递遍历左子树
    cout<data
    DoubleTraverse(T>rchild) 递遍历右子树
    }
    }
    (5)计算二叉树宽度(二叉树宽度指二叉树层中结点数值)
    [题目分析] 求二叉树高度算法见题求宽度采层次遍历方法记层结点数层遍历完毕结点数原先宽度修改宽度
    [算法描述]
    int Width(BiTree bt)求二叉树bt宽度
    {if (btnull) return (0) 空二叉树宽度0
    else
    {BiTree Q[]Q队列元素二叉树结点指针容量足够
    front1rear1last1
    front队头指针rear队尾指针last层右结点队列中位置
    temp0 maxw0 temp记局部宽度 maxw记宽度
    Q[rear]bt 根结点入队列
    while(front {pQ[front++] temp++ 层元素数加1
    if (p>lchildnull) Q[++rear]p>lchild 左子女入队
    if (p>rchildnull) Q[++rear]p>rchild 右子女入队
    if (front>last) 层结束
    {lastrear
    if(temp>maxw) maxwtemp
    last指层右元素 更新前宽度
    temp0
    }if
    }while
    return (maxw)
    }结束width

    (6)层次序遍历二叉树方法统计树中具度1结点数目
    [题目分析]
    某结点左子树空右子树非空者右子树空左子树非空该结点度1结点
    [算法描述]
    int Level(BiTree bt) 层次遍历二叉树统计度1结点数
    {int num0 num统计度1结点数
    if(bt){QueueInit(Q) QueueIn(Qbt)Q二叉树结点指针元素队列
    while(QueueEmpty(Q))
    {pQueueOut(Q) cout<

    data 出队访问结点
    if(p>lchild && p>rchild ||p>lchild && p>rchild)num++
    度1结点
    if(p>lchild) QueueIn(Qp>lchild) 非空左子女入队
    if(p>rchild) QueueIn(Qp>rchild) 非空右子女入队
    } while(QueueEmpty(Q))
    }if(bt)
    return(num)
    }返回度1结点数

    (7)求意二叉树中第条长路径长度输出路径结点值
    [题目分析]序遍历栈中保留前结点祖先信息变量保存栈高栈顶指针退栈时栈顶指针高保存高栈顶指针值时该栈倒入辅助栈中辅助栈始终保存长路径长度结点直序遍历完毕辅助栈中容求
    [算法描述]
    void LongestPath(BiTree bt)求二叉树中第条长路径长度
    {BiTree pbtl[]s[]
    l s栈元素二叉树结点指针l中保留前长路径中结点
    int itop0tag[]longest0
    while(p || top>0)
    {while(p) {s[++top]ptag[top]0 pp>Lc} 左分枝
    if(tag[top]1) 前结点右分枝已遍历
    {if(s[top]>Lc && s[top]>Rc) 叶子结点时查路径长度
    if(top>longest)
    {for(i1i保留前长路径l栈记住高栈顶指针退栈
    }
    else if(top>0) {tag[top]1 ps[top]Rc} 右子分枝
    }while(pnull||top>0)
    }结束LongestPath

    (8)输出二叉树中叶子结点根结点路径
    [题目分析]采先序遍历递方法找叶子结点*b时*b叶子结点尚未添加path中输出路径时需输出b>data值
    [算法描述]
    void AllPath(BTNode *bElemType path[]int pathlen)
    {int i
    if (bNULL)
    {if (b>lchildNULL && b>rchildNULL) *b叶子结点
    {cout << << b>data << 根结点路径 << b>data
    for (ipathlen1i>0i)
    cout << endl
    }
    else
    {path[pathlen]b>data 前结点放入路径中
    pathlen++ 路径长度增1
    AllPath(b>lchildpathpathlen) 递扫描左子树
    AllPath(b>rchildpathpathlen) 递扫描右子树
    pathlen 恢复环境
    }
    } if (bNULL)
    }算法结束



    第6章 图

    1.选择题
    (1)图中顶点度数等图边数( )倍
    A.12 B.1 C.2 D.4
    答案:C
    (2)图中顶点入度等顶点出度( )倍
    A.12 B.1 C.2 D.4
    答案:B
    解释:图顶点入度等顶点出度
    (3)具n顶点图( )条边
    A.n B.n(n1) C.n(n+1) D.n2
    答案:B
    解释:图边方分n顶点中选取2顶点序排列结果n(n1)
    (4)n顶点连通图邻接距阵表示时该距阵少( )非零元素
    A.n B.2(n1) C.n2 D.n2
    答案:B
    (5)G非连通图28条边该图少( )顶点
    A.7 B.8 C.9 D.10
    答案:C
    解释:8顶点图8*7228条边添加点构成非连通图少9顶点
    (6)图意顶点出发进行次深度优先搜索访问图中顶点该图定( )图
    A.非连通 B.连通 C.强连通 D.
    答案:B
    解释:该图意顶点出发顶点路径该图连通图
    (7)面( )算法适合构造稠密图G生成树
    A. Prim算法 B.Kruskal算法 C.Floyd算法 D.Dijkstra算法
    答案:A
    解释:Prim算法适合构造稠密图G生成树Kruskal算法适合构造稀疏图G生成树
    (8)邻接表表示图进行广度优先遍历时通常助( )实现算法
    A.栈 B 队列 C 树 D.图
    答案:B
    解释:广度优先遍历通常助队列实现算法深度优先遍历通常助栈实现算法
    (9)邻接表表示图进行深度优先遍历时通常助( )实现算法
    A.栈 B 队列 C 树 D.图
    答案:A
    解释:广度优先遍历通常助队列实现算法深度优先遍历通常助栈实现算法
    (10)深度优先遍历类似二叉树( )
    A.先序遍历 B.中序遍历 C.序遍历 D.层次遍历
    答案:A
    (11)广度优先遍历类似二叉树( )
    A.先序遍历 B.中序遍历 C.序遍历 D.层次遍历
    答案:D
    (12)图BFS生成树树高DFS生成树树高( )
    A. B.相等 C.相等 D.相等
    答案:C
    解释:特殊图顶点图BFS生成树树高DFS生成树树高相等般图根图BFS生成树DFS树算法思想BFS生成树树高DFS生成树树高
    (13)已知图邻接矩阵图630示顶点v0出发深度优先遍历结果( )

      图630 邻接矩阵
    (14)已知图邻接表图631示顶点v0出发广度优先遍历结果( )深度优先遍历结果( )

    图631 邻接表
    A.0 1 3 2 B.0 2 3 1 C.0 3 2 1 D.0 1 2 3
    答案:DD
    (15)面( )方法判断出图否环
    A.深度优先遍历 B.拓扑排序 C.求短路径 D.求关键路径
    答案:B
    2.应题
    (1)已知图632示图请出:
    ① 顶点入度出度
    ② 邻接矩阵
    ③ 邻接表
    ④ 逆邻接表

      图632 图 图633 网
    答案:

    (2)已知图633示网请出:
    ① 邻接矩阵
    ② 邻接表
    ③ 生成树
    答案:




    ① ③










    a

    b
    4

    c
    3












    b

    a
    4

    c
    5

    d
    5

    e
    9






    c

    a
    3

    b
    5

    d
    5

    h
    5






    d

    b
    5

    c
    5

    e
    7

    f
    6

    g
    5

    h
    4
    e

    b
    9

    d
    7

    f
    3









    f

    d
    6

    e
    3

    g
    2









    g

    d
    5

    f
    2

    h
    6










    (3)已知图邻接矩阵图634示试分画出顶点1出发进行遍历深度优先生成树广度优先生成树
    图628 邻接矩阵







    (4)网图635示试迪杰斯特拉算法求出顶点a顶点间短路径完成表69

      图634 邻接矩阵 图635 网
    表69
    D
    终点
    i1
    i2
    i3
    i4
    i5
    i6
    b
    15
    (ab)
    15
    (ab)
    15
    (ab)
    15
    (ab)
    15
    (ab)
    15
    (ab)
    c
    2
    (ac)





    d
    12
    (ad)
    12
    (ad)
    11
    (acfd)
    11
    (acfd)


    e


    10
    (ace)
    10
    (ace)



    f


    6
    (acf)




    g




    16
    (acfg)
    16
    (acfg)
    14
    (acfdg)

    S
    终点集
    {ac}
    {acf}
    {acfe}
    {acfed}
    {acfedg}
    {acfedgb}

    (5)试图636示AOE网:
    ① 求工程早什时间结束
    ② 求活动早开始时间迟开始时间
    ③ 确定活动关键活动

    图636 AOE网




    答案:拓扑序序计算顶点早开始时间Ve迟允许开始时间Vl然计算活动早开始时间e迟允许开始时间l根l e 0 确定关键活动确定关键路径


    1 ¶
    2 ¸
    3 ·
    4 ¹
    5 º
    6 »
    Ve
    0
    19
    15
    29
    38
    43
    Vl
    0
    19
    15
    37
    38
    43


    <1 2>
    <1 3>
    <3 2>
    <2 4>
    <2 5>
    <3 5>
    <4 6>
    <5 6>
    e
    0
    0
    15
    19
    19
    15
    29
    38
    l
    17
    0
    15
    27
    19
    27
    37
    38
    e
    17
    0
    0
    8
    0
    12
    8
    0
    工程早完成时间43关键路径<1 3><3 2><2 5><5 6>

    3.算法设计题
    (1)分邻接矩阵邻接表作存储结构实现图基操作:
    ① 增加新顶点vInsertVex(G v)
    ② 删顶点v相关边DeleteVex(G v)
    ③ 增加条边InsertArc(G v w)
    ④ 删条边DeleteArc(G v w)
    [算法描述]
    假设图G权图邻接矩阵作存储结构四算法分:
    ① 增加新顶点v
    Status Insert_Vex(MGraph &G char v)邻接矩阵表示图G插入顶点v
    {
    if(Gvexnum+1)>MAX_VERTEX_NUM return INFEASIBLE
    Gvexs[++Gvexnum]v
    return OK
    }Insert_Vex

    ② 删顶点v相关边
    Status Delete_Vex(MGraph &Gchar v)邻接矩阵表示图G删顶点v
    {
    nGvexnum
    if((mLocateVex(Gv))<0) return ERROR
    Gvexs[m]<>Gvexs[n] 删顶点交换顶点
    for(i0i{
    Garcs[m]Garcs[n]
    Garcs[m]Garcs[n] 边关系交换
    }
    Garcs[m][m]adj0
    Gvexnum
    return OK
    }Delete_Vex
    分析果删顶点交换顶点话算法会较复杂伴着量元素移动时间复杂度会增加

    ③ 增加条边
    Status Insert_Arc(MGraph &Gchar vchar w)邻接矩阵表示图G插入边(vw)
    {
    if((iLocateVex(Gv))<0) return ERROR
    if((jLocateVex(Gw))<0) return ERROR
    if(ij) return ERROR
    if(Garcs[j]adj)
    {
    Garcs[j]adj1
    Garcnum++
    }
    return OK
    }Insert_Arc

    ④ 删条边
    Status Delete_Arc(MGraph &Gchar vchar w)邻接矩阵表示图G删边(vw)
    {
    if((iLocateVex(Gv))<0) return ERROR
    if((jLocateVex(Gw))<0) return ERROR
    if(Garcs[j]adj)
    {
    Garcs[j]adj0
    Garcnum
    }
    return OK
    }Delete_Arc

    邻接表作存储结构题出Insert_Arc算法余算法类似
    Status Insert_Arc(ALGraph &Gchar vchar w)邻接表表示图G插入边(vw)
    {
    if((iLocateVex(Gv))<0) return ERROR
    if((jLocateVex(Gw))<0) return ERROR
    pnew ArcNode
    p>adjvexjp>nextarcNULL
    if(Gverticesfirstarc) Gverticesfirstarcp
    else
    {
    for(qGverticesfirstarcq>q>nextarcqq>nextarc)
    if(q>adjvexj) return ERROR 边已存
    q>nextarcp
    }
    Garcnum++
    return OK
    }Insert_Arc

    (2)连通图采邻接表作存储结构设计算法实现顶点v出发深度优先遍历非递程
    [算法描述]
    Void DFSn(Graph Gint v)
    { 第v顶点出发非递实现深度优先遍历图G
    Stack s
    SetEmpty(s)
    Push(sv)
    While(StackEmpty(s))
    { 栈空时第v顶点连通分量已遍历完
    Pop(sk)
    If(visited[k])
    { visited[k]TRUE
    VisitFunc(k) 访问第k顶点
    第k顶点邻接点进栈
    for(wFirstAdjVex(Gk)wwNextAdjVex(Gkw))
    {
    if(visited[w]&&wGetTop(s)) Push(sw) 图中环时wGetTop(s)
    }
    }
    }

    (3)设计算法求图G中距离顶点v短路径长度顶点设v达余顶点
    [题目分析]
    利Dijkstra算法求v0顶点短路径分保存数组D[i]中然求出D[i]中值数组标m
    [算法描述]
    int ShortestPath_MAX(AMGraph G int v0){
    Dijkstra算法求距离顶点v0短路径长度顶点m
    nGvexnum nG中顶点数
    for(v 0 v S[v] false S初始空集
    D[v] Garcs[v0][v] v0终点短路径长度初始化
    if(D[v]< MaxInt) Path [v]v0 果v0v间弧v前驱置v0
    else Path [v]1 果v0v间弧v前驱置1
    }for
    S[v0]true v0加入S
    D[v0]0 源点源点距离0
    *开始循环次求v0某顶点v短路径v加S集*
    for(i1i min MaxInt
    for(w0w if(S[w]&&D[w] {vw minD[w]} 选择条前短路径终点v
    S[v]true v加入S
    for(w0w if(S[w]&&(D[v]+Garcs[v][w] D[w]D[v]+Garcs[v][w] 更新D[w]
    Path [w]v 更改w前驱v
    }if
    }for
    *短路径求解完毕设距离顶点v0短路径长度顶点m *
    MaxD[0]
    m0
    for(i1i if(Maxreturn m
    }
    (4)试基图深度优先搜索策略写算法判邻接表方式存储图中否存顶点vi顶点vj路径(i≠j)
    [题目分析]
    引入变量level控制递进行层数
    [算法描述]
    int visited[MAXSIZE] 指示顶点否前路径
    int level=1递进行层数
    int exist_path_DFS(ALGraph Gint iint j)深度优先判断图G中顶点i顶点j
    否路径返回1否返回0
    {
    if(ij) return 1 ij
    else
    {
    visited[i]1
    for(pGvertices[i]firstarcppp>nextarclevel)
    { level++
    kp>adjvex
    if(visited[k]&&exist_path(kj)) return 1i游顶点j路径
    }for
    }else
    if (level1) return 0
    }exist_path_DFS
    (5)采邻接表存储结构编写算法判图中意定两顶点间否存条长度k简单路径
    [算法描述]
    int visited[MAXSIZE]
    int exist_path_len(ALGraph Gint iint jint k)
    判断邻接表方式存储图G顶点ij否存长度k简单路径
    {if(ij&&k0) return 1 找条路径长度符合求
    else if(k>0)
    {visited[i]1
    for(pGvertices[i]firstarcppp>nextarc)
    {lp>adjvex
    if(visited[l])
    if(exist_path_len(Gljk1)) return 1 剩余路径长度减
    }for
    visited[i]0 题允许访问结点出现条路径中
    }else
    return 0 没找
    }exist_path_len

























    第7章 查找
    1.选择题
    (1)n元素表做序查找时查找元素概率相均查找长度( )
    A.(n1)2 B. n2 C.(n+1)2 D.n
    答案:C
    解释:总查找次数N1+2+3+…+nn(n+1)2均查找长度Nn(n+1)2
    (2)适折半查找表存储方式元素排列求( )
    A.链接方式存储元素序 B.链接方式存储元素序
    C.序方式存储元素序 D.序方式存储元素序
    答案:D
    解释:折半查找求线性表必须采序存储结构表中元素关键字序排列
    (3)果求线性表较快查找适应动态变化求采( )查找法
    A.序查找 B.折半查找
    C.分块查找 D.哈希查找
    答案:C
    解释:分块查找优点:表中插入删数元素时找该元素应块该块进行插入删运算块序插入删较容易需进行量移动果线性表快速查找常动态变化采分块查找
    (4)折半查找序表(4610122030507088100)查找表中元素58次表中( )较查找结果失败
    A.20703050 B.30887050
    C.2050 D.308850
    答案:A
    解释:表中10元素第次取ë(1+10)2û5第五元素20较5820取ë(6+10)2û8第八元素70较次类推3050较终查找失败
    (5)22记录序表作折半查找查找失败时少需较( )次关键字
    A.3 B.4 C.5 D.6
    答案:B
    解释:22记录序表折半查找判定树深度 ëlog222û + 15该判定树满二叉树查找失败时较5次少较4次
    (6)折半搜索二叉排序树时间性( )
    A.相 B.完全
    C.时相 D.数量级O(log2n)
    答案:C
    (7)分列序列构造二叉排序树三序列构造结果( )
    A.(10080 90 60 120110130)
    B.(10012011013080 60 90)
    C.(10060 80 90 120110130)
    D.(10080 60 90 120130110)
    答案:C
    解释:ABCD四选项构造二叉排序树100根易知ABD三序列中第100关键字80100左孩子80C选项中100左孩子60选C
    (8)衡二叉树中插入结点造成衡设低衡结点A已知A左孩子衡子0右孩子衡子1应作( )型调整衡
    A.LL B.LR C.RL D.RR
    答案:C
    (9)列关m阶B树说法错误( )
    A.根结点m棵子树
    B.叶子层次
    C.非叶结点少m2 (m偶数)m2+1(m奇数)棵子树
    D.根结点中数序
    答案:D
    (10)面关BB+树叙述中正确( )
    A.B树B+树衡叉树 B.B树B+树文件索引结构
    C.B树B+树效支持序检索 D.B树B+树效支持机检索
    答案:C
    (11)m阶B树棵( )
    A.m叉排序树 B.m叉衡排序树
    C.m1叉衡排序树 D.m+1叉衡排序树
    答案:B
    (12)面关哈希查找说法正确( )
    A.哈希函数构造越复杂越样机性突
    B.留余数法哈希函数中
    C.存特坏哈希函数视情况定
    D.哈希表均查找长度时记录总数关
    答案:C
    (13)面关哈希查找说法正确( )
    A.采链址法处理突时查找元素时间相
    B.采链址法处理突时插入规定总链首插入元素时间相
    C.链址法处理突会引起二次聚集现象
    D.链址法处理突适合表长确定情况
    答案:A
    解释:义词构成单链表中查找该单链表表中元素消耗时间
    (14)设哈希表长14哈希函数H(key)key11表中已数关键字15386184四现关键字49元素加表中二次探测法解决突放入位置( )
    A.8 B.3 C.5 D.9
    答案:D
    解释:关键字15放入位置4关键字38放入位置5关键字61放入位置6关键字84放入位置7添加关键字49计算址5突二次探测法解决突新址6突二次探测法解决突新址4突二次探测法解决突新址9突关键字49放入位置9
    (15)采线性探测法处理突探测位置查找成功情况探测位置关键字 ( )
    A.定义词 B.定义词
    C.定义词 D.相
    答案:A
    解释:探测关键字处理关键字突程中放入该位置

    2.应题
    (1)假定序表:(34572430425463728795)进行折半查找试回答列问题:
    ① 画出描述折半查找程判定树
    ② 查找元素54需次元素较?
    ③ 查找元素90需次元素较?
    ④ 假定元素查找概率相等求查找成功时均查找长度
    答案:
    ①先画出判定树(注:midë(1+12)2û6):
    30
    5 63
    3 7 42 87
    4 24 54 72 95
    ②查找元素54需次30 63 42 54 元素较
    ③查找元素90需次30 6387 95元素较
    ④求ASL前需统计元素查找次数判定树前3层查找1+2×2+4×317次
    层未满8×45×420次
    ASL=112(17+20)=3712≈308

    (2)棵空二叉排序树中次插入关键字序列1271711162139214请画出二叉排序树
    答案:
    12
    7 17
    2 11 16 21
    4 9 13
    验算方法: 中序遍历应排序结果:2479111213161721

    (3)已知示长度12表:(Jan Feb Mar Apr May June July Aug Sep Oct Nov Dec)
    ① 试表中元素序次插入棵初始空二叉排序树画出插入完成二叉排序树求等概率情况查找成功均查找长度
    ② 表中元素先进行排序构成序表求等概率情况序表进行折半查找时查找成功均查找长度
    ③ 表中元素序构造棵衡二叉排序树求等概率情况查找成功均查找长度
    答案:

    (4)图731示3阶B树次执行列操作画出步操作结果
    ① 插入90 ② 插入25 ③ 插入45 ④ 删60

    图731 3阶B树






    (5)设哈希表址范围0~17哈希函数:H(key)key16线性探测法处理突输入关键字序列:(1024321731304647406349)构造哈希表试回答列问题:
    ① 画出哈希表示意图
    ② 查找关键字63需次关键字进行较?
    ③ 查找关键字60需次关键字较?
    ④ 假定关键字查找概率相等求查找成功时均查找长度
    答案:
    ①画表:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    32
    17
    63
    49




    24
    40
    10



    30
    31
    46
    47
    ②查找63首先H(63)631615号单元容较6331较 匹配
    然移4647321763相较6次
    ③查找60首先H(60)601612号单元容较12号单元空(应空标记)应较次
    ④黑色数元素较1次6次
    红色元素相统计移位位数63需6次49需3次40需2次46需3次47需3次
    ASL111(6+2+3×3+6)=2311

    (6)设组关键字(901231455208427)采哈希函数:H(key)key 7 表长10开放址法二次探测法处理突求:该关键字序列构造哈希表计算查找成功均查找长度
    答案:
    散列址
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    关键字
    14
    1
    9
    23
    84
    27
    55
    20
     
     
    较次数
    1
    1
    1
    2
    3
    4
    1
    2
     
     
    均查找长度:ASLsucc(1+1+1+2+3+4+1+2)8158
    关键字27例:H(27)2776(突) H1(6+1)107(突)
    H2(6+22)100(突) H3(6+33)105 较4次

    (7)设哈希函数H(K)3 K mod 11哈希址空间0~10关键字序列(321349243821412)述两种解决突方法构造哈希表分求出等概率查找成功时查找失败时均查找长度ASLsuccASLunsucc
    ① 线性探测法
    ② 链址法
    答案:

    散列址
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    关键字
     
    4
     
    12
    49
    38
    13
    24
    32
    21
     
    较次数
     
    1
     
    1
    1
    2
    1
    2
    1
    2
     
    ASLsucc (1+1+1+2+1+2+1+2)8118
    ASLunsucc(1+2+1+8+7+6+5+4+3+2+1)114011



    ASLsucc (1*5+2*3)8118
    ASLunsucc(1+2+1+2+3+1+3+1+3+1+1)111911

    3.算法设计题
    (1)试写出折半查找递算法
    [算法描述]
    int BinSrch(rectype r[ ]int klowhigh)
    长n序表中查找关键字k查找成功返回k位置查找失败返回0
    {if(low≤high) lowhigh分序表界界
    {mid(low+high)2
    if(r[mid]keyk)return (mid)
    else if(r[mid]key>k)return (BinSrch(rkmid+1high))
    else return (BinSrch(rklowmid1))
    }
    else return (0)查找失败
    }算法结束
    (2)试写判定二叉树否二叉排序树算法
    [题目分析] 根二叉排序树中序遍历结点值增序性质遍历中前遍历结点前驱结点值较出结设全局指针变量pre(初值null)全局变量flag初值true非二叉排序树置flagfalse
    [算法描述]
    #define true 1
    #define false 0
    typedef struct node
    {datatype data struct node *lchild*rchild} *BTree
    void JudgeBST(BTree Tint flag)
    判断二叉树否二叉排序树算法结束调程序中flag出结
    { if(Tnull && flag)
    { Judgebst(T>lchildflag) 中序遍历左子树
    if(prenull)preT 中序遍历第结点必判断
    else if(pre>datadata)preT前驱指针指前结点
    else{flagflase} 完全二叉树
    Judgebst (T>rchildflag) 中序遍历右子树
    }JudgeBST算法结束

    (3)已知二叉排序树采二叉链表存储结构根结点指针T链结点结构(lchilddatarchild)中lchildrchild分指该结点左右孩子指针data域存放结点数信息请写出递算法输出二叉排序树中数值>x结点数求先找第满足条件结点次输出满足条件结点
    [题目分析]题算法题样中序遍历二叉树访问根结点处判断结点值否≥x输出记住第≥x值结点指针里出算法利二叉排序树性质果根结点值>x左分枝中 void Print(BSTree t)
    中序输出t根二叉排序树结点
    {if(t){Print(t>lchild)
    Cout< Print(t>rchild)
    }
    }
    void PrintAllx(BSTree bstdatatype x)
    二叉排序树bst中查找值≥x结点输出
    {pbst
    if(p)
    {while(p && p>datarchild右分枝找第值≥x结点
    bstp bst指结点值≥x结点树根
    if(p)
    {fp pp>lchild 找第值 while(p && p>data≥x)左分枝找第值 {fppp>lchild } fp双亲结点指针指第值≥x结点
    if(p) f>lchildnull 双亲找第值Print(bst)输出bst根子树
    }while
    }层if(p)
    }第层if(p)
    }PrintAllx

    (4)已知二叉树T结点形式(llingdatacountrlink)树中查找值X结点找记数(count)加1否作新结点插入树中插入二叉排序树写出非递算法
    [算法描述]
    void SearchBST(BiTree &Tint target){
    BiTree sqf 数值target新建结点s
    snew BiTNode
    s>dataxtarget
    s>datacount0
    s>lchilds>rchildNULL

    if(T){
    Ts
    return
    } 果该树空跳出该函数
    fNULL
    qT
    while (q){
    if (q>dataxtarget){
    q>datacount++
    return
    } 果找该值计数加
    fq
    if (q>datax>target) 果查找值目标值该树左孩子
    qq>lchild
    else 否右孩子
    qq>rchild
    } 新结点插入树中
    if(f>datax>target)
    f>lchilds
    else
    f>rchilds
    }
    (5)假设棵衡二叉树结点表明衡子b试设计算法求衡二叉树高度
    [题目分析] 二叉树结点已标明衡子b根结点开始记树层次根结点层次1层层次加1直层数叶子结点衡二叉树高度结点衡子b0时选左右分枝查找b0左(b1时)右(b1时)查找
    [算法描述]
    int Height(BSTree t)
    求衡二叉树t高度
    {level0pt
    while(p)
    {level++ 树高度增1
    if(p>bf<0)pp>rchildbf1 右分枝
    bf衡子二叉树t结点域篇幅限没写出存储定义
    else pp>lchild bf>0 左分枝
    }while
    return (level)衡二叉树高度
    } 算法结束

    (6)分写出散列表中插入删关键字K记录算法设散列函数H解决突方法链址法
    [算法描述]
    bool insert(){
    int data
    cin>>data
    int anthash(data)
    LinkList pHT[ant] 初始化散列表
    while (p>next){
    if(p>next>datadata)
    return false
    pp>next
    } 找插入位置
    LinkList s
    snew LNode
    s>datadata
    s>nextp>next
    p>nexts 插入该结点
    return true
    }

    bool deletes(){
    int data
    cin>>data
    int anthash(data)
    LinkList pHT[ant] 初始化散列表
    while (p>next){
    if(p>next>datadata){
    LinkList sp>next
    p>nexts>next
    delete s 删该结点
    return true
    } 找删位置
    pp>next 遍历结点
    }
    return false
    }




    第8章 排序
    1.选择题
    (1)未排序序列中次取出元素已排序序列中元素进行较放入已排序序列正确位置方法种排序方法称( )
    A.排序 B.泡排序 C.插入排序 D.选择排序
    答案:C
    (2)未排序序列中挑选元素次放入已排序序列(初始时空)端方法称( )
    A.排序 B.泡排序 C.插入排序 D.选择排序
    答案:D
    (3)n关键字进行泡排序列( )情况较次数
    A.排列 B.排列
    C.元素序 D.元素基序
    答案:B
    解释:关键字进行泡排序关键字逆序时较次数
    (4)n排序码进行泡排序元素序情况较次数( )
    A.n+1 B.n C.n1 D.n(n1)2
    答案:D
    解释:较次数时第次较n1次第二次较n2次……次较1次(n1)+(n2)+…+1 n(n1)2
    (5)快速排序列( )情况易发挥长处
    A.排序数中含相排序码
    B.排序数已基序
    C.排序数完全序
    D.排序数中值值相差悬殊
    答案:C
    解释:B选项快速排序坏情况
    (6)n关键字作快速排序坏情况算法时间复杂度( )
    A.O(n) B.O(n2) C.O(nlog2n) D.O(n3)
    答案:B
    解释:快速排序均时间复杂度O(nlog2n)坏情况关键字基排序情况时间复杂度O(n2)
    (7)组记录排序码(46 7956384084)利快速排序方法第记录基准次划分结果( )
    A.384046567984 B.403846795684
    C.403846567984 D.403846845679
    答案:C
    (8)列关键字序列中( )堆
    A.167231239453 B.942331721653
    C.165323943172 D.162353319472
    答案:D
    解释:D选项根堆
    (9)堆种( )排序
    A.插入 B.选择 C.交换 D.
    答案:B
    (10)堆形状棵( )
    A.二叉排序树 B.满二叉树 C.完全二叉树 D.衡二叉树
    答案:C
    (11)组记录排序码(467956384084)利堆排序方法建立初始堆( )
    A.794656384084 B.847956384046
    C.847956464038 D.845679404638
    答案:B
    (12)述种排序方法中求存( )
    A.希尔排序 B.快速排序 C.排序 D.堆排序
    答案:C
    解释:堆排序希尔排序空间复杂度O(1)快速排序空间复杂度O(log2n)排序空间复杂度O(n)
    (13)述种排序方法中( )稳定排序方法
    A.希尔排序 B.快速排序 C.排序 D.堆排序
    答案:C
    解释:稳定排序希尔排序简单选择排序快速排序堆排序稳定排序直接插入排序折半插入排序泡排序排序基数排序
    (14)数表中10000元素果仅求求出中10元素采( )算法节省时间
    A.泡排序 B.快速排序 C.简单选择排序 D.堆排序
    答案:D
    (15)列排序算法中( )保证趟排序少元素放终位置
    A.希尔排序 B.快速排序 C.泡排序 D.堆排序
    答案:A
    解释:快速排序趟排序作枢轴元素放终位置泡排序趟排序元素放终位置堆排序趟排序元素放终位置
    2.应题
    (1)设排序关键字序列{1221630281016*20618}试分写出排序方法趟排序结束关键字序列状态
    ① 直接插入排序
    ② 折半插入排序
    ③ 希尔排序(增量选取531)
    ④ 泡排序
    ⑤ 快速排序
    ⑥ 简单选择排序
    ⑦ 堆排序
    ⑧ 二路排序
    答案:
    ①直接插入排序
    [2 12] 16 30 28 10 16* 20 6 18
    [2 12 16] 30 28 10 16* 20 6 18
    [2 12 16 30] 28 10 16* 20 6 18
    [2 12 16 28 30] 10 16* 20 6 18
    [2 10 12 16 28 30] 16* 20 6 18
    [2 10 12 16 16* 28 30] 20 6 18
    [2 10 12 16 16* 20 28 30] 6 18
    [2 6 10 12 16 16* 20 28 30] 18
    [2 6 10 12 16 16* 18 20 28 30]

    ② 折半插入排序 排序程①

    ③ 希尔排序(增量选取531)
    10 2 16 6 18 12 16* 20 30 28 (增量选取5)
    6 2 12 10 18 16 16* 20 30 28 (增量选取3)
    2 6 10 12 16 16* 18 20 28 30 (增量选取1)

    ④ 泡排序
    2 12 16 28 10 16* 20 6 18 [30]
    2 12 16 10 16* 20 6 18 [28 30]
    2 12 10 16 16* 6 18 [20 28 30]
    2 10 12 16 6 16* [18 20 28 30]
    2 10 12 6 16 [16* 18 20 28 30]
    2 10 6 12 [16 16* 18 20 28 30]
    2 6 10 [12 16 16* 18 20 28 30]
    2 6 10 12 16 16* 18 20 28 30]

    ⑤ 快速排序
    12 [6 2 10] 12 [28 30 16* 20 16 18]
    6 [2] 6 [10] 12 [28 30 16* 20 16 18 ]
    28 2 6 10 12 [18 16 16* 20 ] 28 [30 ]
    18 2 6 10 12 [16* 16] 18 [20] 28 30
    16* 2 6 10 12 16* [16] 18 20 28 30
    左子序列递深度1右子序列递深度3

    ⑥ 简单选择排序
    2 [12 16 30 28 10 16* 20 6 18]
    2 6 [16 30 28 10 16* 20 12 18]
    2 6 10 [30 28 16 16* 20 12 18]
    2 6 10 12 [28 16 16* 20 30 18]
    2 6 10 12 16 [28 16* 20 30 18]
    2 6 10 12 16 16* [28 20 30 18]
    2 6 10 12 16 16* 18 [20 30 28]
    2 6 10 12 16 16* 18 20 [28 30]
    2 6 10 12 16 16* 18 20 28 [30]


    ⑧ 二路排序
    2 12 16 30 10 28 16 * 20 6 18
    2 12 16 30 10 16* 20 28 6 18
    2 10 12 16 16* 20 28 30 6 18
    2 6 10 12 16 16* 18 20 28 30

    (2)出关键字序列{3211565746287331333463}试链式基数排序方法列出趟分配收集程
    答案:
    低位优先法 →321→156→57→46→28→7→331→33→34→63
    分配 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
    321 33 34 156 57 28
    331 63 46 7
    收集 →321→331→33→63→34→156→46→57→7→28
    (3)输入文件(101511961371311719100552093050690)k6时置换选择算法写出建立初始败者树生成初始段
    答案:
    初始败者树   
    2

    5

    71

    4

    0

    3

    1

    3

    1

    61

    1

    19

    1

    51

    1

    101

    1

    1

     
     
     









    初始段:R131931516171100101
    R2917192030505590
    R36

    3.算法设计题
    (1)试单链表存储结构实现简单选择排序算法
    [算法描述]:
    void LinkedListSelectSort(LinkedList head)
    算法趟找出关键字结点数前结点进行交换交换指针须记
    前结点结点前驱指针
    phead>next
    while(pnull)
    {qp>next rp 设r指关键字结点指针
    while (qnull)
    {if(q>datadata) rq
    qq>next
    }
    if(rp) r>data<>p>data
    pp>next
    }

    (2)n记录存储带头结点双链表中现双泡排序法升序进行排序请写出种排序算法(注:双泡排序相邻两趟排序相反方泡)
    [算法描述]:
    typedef struct node
    { ElemType data
    struct node *prior*next
    }node*DLinkedList
    void TwoWayBubbleSort(DLinkedList la)
    存储带头结点双链表la中元素进行双起泡排序
    {int exchange1 设标记
    DLinkedList ptemptail
    headla 双链表头算法程中起泡开始结点
    tailnull 双链表尾算法程中起泡开始结点
    while (exchange)
    {phead>next p工作指针指前结点
    exchange0 假定趟交换
    while (p>nexttail) (右)起泡趟元素沉底
    if (p>data>p>next>data) 交换两结点指针涉6条链
    {tempp>next exchange1交换
    p>nexttemp>nexttemp>next>priorp 先结点链表摘
    temp>nextp p>prior>nexttemp temp插p结点前
    temp>priorp>prior p>priortemp
    }
    else pp>next 交换指针移
    tailp 准备起泡
    ptail>prior
    while (exchange && p>priorhead)
    (左)起泡趟元素出
    if (p>data

    prior>data) 交换两结点指针涉6条链
    {tempp>prior exchange1 交换
    p>priortemp>priortemp>prior>nextp
    先temp结点链表摘
    temp>priorp p>next>priortemp temp插p结点(右)
    temp>nextp>next p>nexttemp
    }
    else pp>prior 交换指针前移
    headp 准备起泡
    } while (exchange)
    } 算法结束

    (3)设序放置n桶桶中装粒砾石粒砾石颜色红白蓝求重新安排砾石红色砾石前白色砾石居中蓝色砾石居重新安排时粒砾石颜色次允许交换操作调整砾石位置
    [题目分析]利快速排序思想解决求粒砾石颜色次设3指针ijk分指红色白色砾石位置处理前元素kn开始右左搜索该元素兰色元素动指针左移(k1)前元素红色砾石分i>j(时尚没白色砾石)i方便处理三种砾石颜色整数123表示
    [算法描述]:
    void QkSort(rectype r[]int n) {
    r含n元素线性表元素具红白兰色砾石序存储结构存储
    算法排序红色砾石前白色居中兰色
    int i1j1kntemp
    while (kj){
    while (r[k]key3) k 前元素兰色砾石指针左移
    if (r[k]key1) 前元素红色砾石
    if (i>j){tempr[k]r[k]r[i]r[i]temp i++}
    左侧红色砾石交换r[k]r[i]
    else {tempr[j]r[j]r[i]r[i]temp j++
    左侧已红色白色砾石先交换白色砾石位
    tempr[k]r[k]r[i]r[i]temp i++
    白色砾石(i指)定砾石(j指)
    } 交换r[k]r[i]红色砾石入位
    if (r[k]key2)
    if (i 左侧已白色砾石交换r[k]r[j]
    else { tempr[k]r[k]r[i]r[i]temp ji+1}
    ij分指红白色砾石位置
    }while
    if (r[k]2) j++ * 处理粒砾石
    else if (r[k]1) { tempr[j]r[j]r[i]r[i]temp i++ j++ }
    红白兰色砾石数分 i1jinj+1
    }结束QkSor算法
    [算法讨]j(面指白色)作工作指针r[1j1]作红色r[jk1]白色r[kn]兰色j1开始查r[j]白色jj+1r[j]红色交换r[j]r[i]jj+1ii+1r[j]兰色交换r[j]r[k]kk1算法进行j>k止
    算法片段:
    int i1j1kn
    while(j if (r[j]1) 前元素红色
    {tempr[i] r[i]r[j] r[j]temp i++j++ }
    else if (r[j]2) j++ 前元素白色
    else (r[j]3 前元素兰色
    {tempr[j] r[j]r[k] r[k]temp k }
    两种算法出正确选择变量(指针)重性

    (4)编写算法n关键字取整数值记录序列进行整理关键字负值记录排关键字非负值记录前求:
    ① 采序存储结构记录辅助存储空间
    ② 算法时间复杂度O(n)
    [算法描述]
    void process (int A[n]){
    low 0
    high n1
    while ( lowwhile (lowlow++
    while (low0)
    high++
    if (lowxA[low]
    A[low]A[high]
    A[high]x
    low++
    high
    }
    }
    return
    }

    (5)助快速排序算法思想组序记录中查找定关键字值等key记录设组记录存放数组r[ln]中查找成功输出该记录r数组中位置值否显示not find信息请简说明算法思想编写算法
    [题目分析]查记录作枢轴先前次较枢轴前直查找成功返回位置失败返回0止
    [算法描述]
    int index (RecType R[]int lhdatatype key)
    {int iljh
    while (i { while (ikey) j
    if (R[j]keykey) return j
    while (i if (R[i]keykey) return i
    }
    cout< }index

    (6)种简单排序算法做计数排序种排序算法排序表进行排序排序结果存放新表中必须注意表中排序关键字互相计数排序算法针表中记录扫描排序表趟统计表中少记录关键字该记录关键字假设针某记录统计出计数值c记录新序表中合适存放位置c
    ① 出适计数排序序表定义
    ② 编写实现计数排序算法
    ③ n记录表关键字较次数少?
    ④ 简单选择排序相较种方法否更?什?
    [算法描述]
    ① typedef struct
    {int key
    datatype info
    }RecType
    ② void CountSort(RecType a[]b[]int n)
    计数排序算法a中记录排序放入b中
    {for(i0i{for(j0cnt0jif(a[j]keyb[cnt]a[i]
    }
    }Count_Sort
    ③ n记录表关键码较n2次
    ④ 简单选择排序算法算法简单选择排序较次数n(n1)2交换记录空间种方法较次数n2需数组空间
    [算法讨]题目求针表中记录扫描排序表趟较次数n2次限制意两记录间应该进行次较算法中较语句改:
    for(i0ifor(i0i for(ji+1j if(a[i]key
    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 2 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    《数据结构(C语言版)》教案

    2011 至2012 学年第 一 学期教  案课程名称 数据结构 使用教材《数据结构(C语言版)》教学时数 56    课程性质 必修    任课班级(人数)信管(53人)   信息 系(部)...

    3年前   
    646    0

    数据结构课程设计运动会分数统计(C语言版)

    数据结构课程设计运动会分数统计(C语言版)目 录第一章 绪 论 1 1.1 运动会分数统计系统的背景 1 1.2 运动会分数统计系统的任务和目标 1第二章 运动会分数统...

    3年前   
    634    0

    数据结构练习题及答案

    数据结构练习题及答案第1章 绪论一、 判断题1. 数据的逻辑结构与数据元素本身的内容和形式无关。 (√)2. 一个数据结构是由一个逻辑...

    3年前   
    1074    0

    课后习题答案-第11章沟通

    第十一章 沟通同步测试参考答案一、单项选择题1.C 2.A 3.C 4.B 5.B二、多项选择题1.AD 2. BCDE 3.ABC 4. BDE ...

    4年前   
    2885    0

    课后习题答案-第12章控制

    第12章 控制职能同步测试参考答案一、单项选择题1 A 2 B 3D 4 A 5B二、多项选择题1.ABCD 2.ABCD 3.ABD 4.AD 5.CDE三、简答...

    4年前   
    1123    0

    课后习题答案-第10章激励

    第十章 激励 同步测试参考答案一、单项选择题1 D 2 C 3D 4 C 5B二、多项选择题1.ABCD 2.ACD 3.CD 4. BCD 5. BC三、简答题1、激励...

    4年前   
    3636    0

    课后习题答案-第9章 领导

    第九章 领导职能同步测试参考答案一、单项选择题1.C 2.C 3.B 4.A 5.C二、多项选择题1.ACD 2.ABD 3.BD 4.ABCD 5.AB三、简答题1...

    4年前   
    3010    0

    数据结构(C语言版)课程设计报告表达式求值说明书

    XX大学数据结构课程设计说明书题目: 表达式求值 院 系: 计算机科学与工程学院 专业班级: 计算机班 学...

    3年前   
    535    0

    matlab课后习题答案

    习题二 1. 如何理解“矩阵是MATLAB最基本的数据对象”? 答:因为向量可以看成是仅有一行或一列的矩阵,单个数据(标量)可以看成是仅含一个元素的矩阵,故向量和单个数据都可以作为矩阵的特...

    5年前   
    3196    0

    热学课后习题答案

     。第一章 温度 1-1 定容气体温度计的测温泡浸在水的三相点槽内时,其中气体的压强为50mmHg。       (1)用温度计测量300K的温度时,气体的压强是多少?       (...

    5年前   
    2503    0

    数据结构练习题(含答案)

    数据结构练习题习题1 绪论1.1 单项选择题1. 数据结构是一门研究非数值计算的程序设计问题中,数据元素的① 、数据信息在计算机中的② 以及一组相关的运算等的课程。 ...

    3年前   
    1508    0

    数据结构习题集附答案

    数据结构习题集附答案第一章 绪 论一、选择题1.组成数据的基本单位是( )A.数据项 B.数据类型 C.数据元素 D.数据变量2.数据结构是研究数据的( )以及它们之间的相互关系。A.理...

    3年前   
    858    0

    编译原理课后习题答案

    编译原理课后习题答案Chapter 11.解答:程序设计语言:程序设计语言是遵守一定规范的、描述“计算”(Computing)过程的形式语言。一般可以划分为低级语言和高级语言两大类。低级语言是...

    1年前   
    594    0

    有限元课后习题答案

    1.1 有限元法的基本思想和基本步骤是什么首先,将表示结构的连续离散为若干个子域,单元之间通过其边界上的节点连接成组合体。其次,用每个单元内所假设的近似函数分片地表示求解域内待求的未知厂变量。...

    3年前   
    4381    0

    思修课后习题及答案

    思修课后习题及答案

    5年前   
    1980    0

    课后习题答案-第8章组织变革

    第8章 组织变革与组织创新【同步测试】一、单项选择题1.组织变革按照_____C___可以分为主动性变革和被动性变革。 A.工作的对象不同 B.变革的程度与速度不同 ...

    4年前   
    3144    0

    课后习题答案-第1章管理与管理者

    第1章 管理绪论同步测试参考答案一、单项选择题1 A 2 B 3C 4 B 5C二、多项选择题1.ABCD 2.ABCD 3.AD 4.ABC 5. AC三、简答题1、按...

    4年前   
    2493    0

    《现代控制理论》刘豹著(第3版)课后习题答案

    《现代控制理论》刘豹著(第3版)课后习题答案第一章习题答案1-1 试求图1-27系统的模拟结构图,并建立其状态空间表达式。解:系统的模拟结构图如下:系统的状态方程如下:令,则所以,系统的状态空...

    3年前   
    2001    0

    罗宾斯《组织行为学(第12版)》课后习题答案

     第一章 什么是组织行为学一、简答题1. 从管理者的职能、角色和技能角度,如何理解组织行为学这一概念? 答:管理者的职能包括计划、组织、领导和控制;管理者的角色分为人际角色、信息传递者角...

    2年前   
    622    0

    2018年版毛概课后习题答案

    1.毛泽东思想形成和发展的社会条件是什么?答:(1)20世纪前中期世界和中国政局的变动,是毛泽东思想产生和形成的时代背景。(2)毛泽东思想的产生和形成,是近现代中国社会和革命运动发展的客观需要和历史产物。

    4年前   
    3109    0

    文档贡献者

    文***品

    贡献于2021-11-16

    下载需要 2 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档