数据结构与算法期末复习题

在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行( A )。    

A. p->next=HL->next; HL->next=p;       B. p->next=HL; HL=p;           C. p->next=HL; p=HL;                   D. HL=p; p->next=HL;

一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是(   C  )   

A. 2 3 1 B. 3 2 1   C. 3 1 2 D. 1 2 3

AOV网是一种( D )。        

A.有向图      B.无向图      C.无向无环图    D.有向无环图

采用开放定址法处理散列表的冲突时,其平均查找长度( B )。 

A.低于链接法处理冲突 B. 高于链接法处理冲突 C.与链接法处理冲突相同 D.高于二分查找

若需要利用形参直接访问实参时, 应将形参变量说明为 ( D )参数。 

A.值 B.函数 C.指针 D.引用

在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具 有相同的( A)。 

A.行号 B.列号 C.元素值 D.非零元素个数

从二叉搜索树中查找一个元素时,其时间复杂度大致为 ( C )。 

A. O(n) B. O(1) C. O(log2n) D. O(n 2)

快速排序在最坏情况下的时间复杂度为( D )。

A.O(log2n)      B.O(nlog2n)       C.0(n)         D.0(n2)

设哈夫曼树中的叶子结点总数为m,若用二叉链表作为存储结构,则该哈夫曼树中总共有( B )个空指针域。  

(A) 2m-1 (B) 2m (C) 2m+1 (D) 4m

 

对于一个长度为n的单链存储的线性表,在表头插入元素的时间复杂度为___O(1)______,在表尾插入元素的时间复杂度为____O(n)________。

设W为一个二维数组,其每个数据元素占用4个字节,行下标i从0到7 ,列下标j从0到3 ,则二维数组W的数据元素共占用__128_____个字节。W中第6 行的元素和第4 列的元素共占用____44_____个字节。若按行顺序存放二维数组W,其起始地址为100,则二维数组元素W[6,3]的起始地址为____208______。(

W[i][j]的首地址 =
数组的在内存中的基地址(=100)
+ i * 列数(=6)* 每个元素zhuan占单元数(=4)
+ j *(=3) 每个元素占单元数(=4)
代入得:
W[3][2] 首地址 = 100 + 6 * 4 *4 + 3 * 4 = 208

广义表A= (a,(a,b),((a,b),c)),则它的深度为_____3_______,它的长度为_____3_______

二叉树是指度为2的________有序____________树。一棵结点数为N的二叉树,其所有结点的度的总和是_____n-1________。

对一棵二叉搜索树进行中序遍历时,得到的结点序列是一个____有序序列__________。对一棵由算术表达式组成的二叉语法树进行后序遍历得到的结点序列是该算术表达式的______后缀表达式____________。

对于一棵具有n个结点的二叉树,用二叉链表存储时,其指针总数为____2n_________个,其中______n-1_________个用于指向孩子,_______n+1__________个指针是空闲的。

若对一棵完全二叉树从0开始进行结点的编号,并按此编号把它顺序存储到一维数组A中,即编号为0的结点存储到A[0]中。其余类推,则A[ i ]元素的左孩子元素为___2i+1_____,右孩子元素为______2i+2_________,双亲元素为______(i-1)/2______。

在线性表的散列存储中,处理冲突的常用方法有__________开放定址法______________和____________链接法_________________两种。

当待排序的记录数较大,排序码较随机且对稳定性不作要求时,宜采用_______快速________排序;当待排序的记录数较大,存储空间允许且要求排序是稳定时,宜采用_________归并_______________排序。

在以HL为表头指针的带表头附加结点的单链表和循环单链表中,判断链表为空的条件分别为______HL→next =NULL__________和______HL=HL→next______________。

 

已知一个6x5稀疏矩阵如下所示

 

 

  (1)写出它的三元组线性表;((1,5,1),(3,2,-1),(4,5,-2),(5,1,5),(6,3,7))

(2)给出三元组线性表的顺序存储表示。

 

 

 对于图所示的有向图若存储它采用邻接表, 并且每个顶点邻接表中的边结点都是按照终点序号从小到大的次序链接的,试写出:

 

 

 

(1) 从顶点①出发进行深度优先搜索所得到的深度优先生成树; (2) 从顶点②出发进行广度优先搜索所得到的广度优先生成树;

DFS:1 2 3 4 5

BFS:2 3 4 5 1

写出下述算法的功能: 

 

 

 

 

 

 

功能为:从初始点 vi 出发广度优先搜索由邻接表 GL 所表示的图。

 

设计判断单链表中结点是否关于中心对称算法。

    typedef struct {
        int s[100]; 
        int top;
    } sqstack; 
    int lklistsymmetry(lklist *head){   
        sqstack stack;  
        stack.top= -1; 
        lklist *p;   
        for(p=head;p!=0;p=p->next) {
            stack.top++; 
            stack.s[stack.top]=p->data;
        }   
        for(p=head;p!=0;p=p->next) 
            if (p->data==stack.s[stack.top]) 
                stack.top--; 
            elsereturn 0;   
        return 1; 
    }

设计在链式存储结构上建立一棵二叉树的算法。

    typedef char datatype; 
    typedef struct node {
        datatype data; 
        struct node *lchild,*rchild;
    } bitree; 
    void createbitree(bitree *&bt) {   
        char ch; 
        scanf("%c",&ch);
        if(ch=='#') {
            bt=0; 
            return;
        } 
        bt=(bitree*)malloc(sizeof(bitree));
        bt->data=ch; 
        createbitree(bt->lchild); 
        createbitree(bt->rchild); 
    
    }
设计判断一棵二叉树是否是二叉排序树的算法。
    int minnum=-32768,flag=1; 
    typedef struct node{
        int key; 
        struct node *lchild,*rchild;
    }bitree; 
    void inorder(bitree *bt) { 
        if (bt!=0){
            inorder(bt->lchild); 
            if(minnum>bt->key)flag=0; 
            minnum=bt->key; 
            inorder(bt->rchild);
        } 
    } 

 

posted @ 2020-12-07 20:54  XXXSANS  阅读(3580)  评论(0编辑  收藏  举报