精华内容
下载资源
问答
  • 顺序表中第一个元素储存地址是100,每个元素的长度为2,则第5个元素地址是() A.100 B.108 C.100 D.120 B 100+(5-1)*2==108 线性表若采用链式存储结构,要求内存中可用存储单元地址() A.部分是...
  • 顺序表中第一个元素储存地址是100,每个元素的长度为2,则第5个元素地址是() A.100 B.108 C.100 D.120 B 100+(5-1)*2==108 线性表若采用链式存储结构,要求内存中可用存储单元地址() A.部分是...
  • 二叉排序树与平衡二叉树实现

    热门讨论 2010-12-26 15:25:31
    二叉排序树上进行查找时的平均查找长度和二叉树的形态有关: ①最坏情况下,二叉排序树是通过把一个有序表的n个结点依次插入而生成的,此时所得的二叉排序树蜕化为棵深度为n的单支树,它的平均查找长度和...
  • 2.6.1 正确 22 2.6.2 可读性 23 2.6.3 健壮 23 2.6.4 时间效率高和存储量低 23 2.7 算法效率度量方法 24 随着n值越来越大,它们时间效率上差异也就越来越大。好比有些人每天都学习,而另一些人,打打...
  • 数据结构判断题精编

    千次阅读 2017-12-20 20:02:48
    在长度为n的顺序表中,求第i个元素的直接前驱算法的时间复杂度为O(1)O(1)。( )第i个元素的直接前驱为第i-1个元素,直接存取,事件复杂度为O(1)O(1)。答案:对内部排序是指排序过程在内存中进行的排序。( )答案...

    声明

    所有题搜集于网络。

    在长度为n的顺序表中,求第i个元素的直接前驱算法的时间复杂度为O(1)。( )

    第i个元素的直接前驱为第i-1个元素,直接存取,事件复杂度为O(1)

    答案:

    内部排序是指排序过程在内存中进行的排序。( )

    答案:

    当待排序序列初始有序时,简单选择排序的时间复杂性为O(n)。( )

    O(0),理解各个排序的本质,或熟记排序间的比较。

    答案:

    用邻接矩阵存储一个图时,在不考虑压缩存储的情 况下,所占用的存储空间大小只与图中的顶点个数有关,而与图的边数无关。 ( )

    答案:

    哈希查找法中解决冲突问题的常用方法是除留余数法。( )

    是“线性探测再散列”。

    答案:

    在一个顺序存储的循环队列中, 队头指针指向队头元素的后一个位置。( )

    就指他本身。

    答案:

    在一棵具有n个结点的线索二叉树中,作为线索使用的指针域共有n个。( )

    n+1。

    答案:

    图的深度优先搜索是一种典型的回溯搜索的例子,可以通过递归算法求解。( )

    答案:

    二叉树是一棵无序树。( )

    答案:

    当待排序序列初始有序时,快速排序的时间复杂性为O(n)。

    在数据基本有序时,快速排序蜕变为(接近)起泡排序,时间复杂度是O(n2)

    答案:

    有回路的有向图不能完成拓扑排序。( )

    答案:

    理想情况下哈希查找的等概率查找成功的平均查找长度是O(1)。( )

    答案:

    强连通分量是有向图中的极大强连通子图。( )

    答案:

    一个无向连通图的生成树是图的极小的连通子图。( )

    答案:

    在线性链表中删除中间的结点时,只需将被删结点释放。( )

    答案:

    两个栈共享一片连续内存空间时,为提高内存利 用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。( )

    答案:

    邻接表只能用于有向图的存储,邻接矩阵对于有向图和无向图的存储都适用。( )

    邻接表也能用于无向图的存储。

    答案:

    完全二叉树的某结点若无左孩子,则它必是叶结点。( )

    答案:

    折半查找所对应的判定树,既是一棵二叉查找树,又是一棵理想平衡二叉树。( )

    答案:

    在用单链表表示的链式队列Q中,队头指针为Q->front,队尾指针为Q->rear,则队空条件为Q->front == Q->rear。( )

    因为当队列中只有一个元素的时候 front和rear都指向第一个元素 此时队列不为空
    只有front==rear==null时 队列才为空 。

    答案:

    采用不同的遍历方法,所得到的无向图的生成树总是相同的。( )

    答案:

    对于同一组记录,生成二叉搜索树的形态与插入记录的次序无关。( )

    答案:

    链式栈与顺序栈相比, 一个明显的优点是通常不会出现栈满的情况。( )

    答案:

    对于两棵具有相同记录集合而具有不同形态的二叉搜索树,按中序遍历得到的结点序列是相同的。( )

    答案:

    在用散列表存储关键码集合时,可以用双散列法寻找下一个空位置。在设计再散列函数时,要求计算出的值与表 的大小m 互质。( )

    答案:

    当输入序列已经基本有序时,起泡排序需要比较关键码的次数,比快速排序还要少。( )

    答案:

    对平衡二叉树进行中根遍历,可得到结点的有序序列。( )

    答案:

    线索二叉树中的每个结点通常包含有5个数据成员。( )

    这里写图片描述
    其中:

    ltag={01lchildlchild

    rtag={01rchildrchild

    答案:

    哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。( )

    答案:

    在用循环单链表表示的链式队列中,可以不设队头指针,仅在链尾设置队尾指针。( )

    答案:

    链队列的出队操作总是需要修改尾指针。( )

    修改头指针。

    答案:

    在顺序表中,逻辑上相邻的元素在物理位置上不一定相邻。( )

    答案:

    图的广度优先搜索算法通常采用非递归算法求解。( )

    答案:

    拓扑排序是指结点的值是有序排序的。( )

    答案:错**

    对一个连通图进行一次深度优先搜索可以遍访图中的所有顶点。( )

    答案:

    数据元素是数据的最小单位。()

    数据元素是数据的“基本单位”,数据项是数据不可分割的“最小单位”。
    答案:

    线索二叉树中每个结点通过线索都可以直接找到它的前驱和后继。( )

    答案:

    进行折半查找的表必须是顺序存储的有序表。( )

    答案:

    展开全文
  • 《数据结构 1800题》

    热门讨论 2012-12-27 16:52:03
    10.下面的程序段,对x的赋值语句的频度__t(n)=O(n3)____(表示 n的函数) FOR i:=1 TO n DO FOR j:=1 TO i DO FOR k:=1 TO j DO x:=x+delta; 【北京工业大学 1999 一、6(2分)】 ...
  • 建立一个长度为n的数组,保存这n个丑数。在进行运算的时候,某个位置需要求得丑数一定是前面某个丑数乘以2、3或者5的结果,我们分别记录之前乘以2后能得到的最大丑数M2,乘以3后能得到的最大丑数M3,乘以5后能得到的...
  • 一趟归并需要n次,总共需要logN次,因此为O(N*logN) 最坏的情况下,接近于平均情况下,为O(N*logN) 说明:对长度为n的文件,需进行logN 趟二路归并,每趟归并的时间为O(n),故其时间复杂度无论是最好情况下还是...

    归并排序(MergeSort)

    1、思想

        多次将两个或两个以上的有序表合并成一个新的有序表。

     

    2、算法时间复杂度 
       最好的情况下:一趟归并需要n次,总共需要logN次,因此为O(N*logN) 
       最坏的情况下,接近于平均情况下,为O(N*logN) 
       说明:对长度为n的文件,需进行logN 趟二路归并,每趟归并的时间为O(n),故其时间复杂度无论是在最好情况下还是在最坏情况下均是O(nlgn)。

    3、稳定性 

       归并排序最大的特色就是它是一种稳定的排序算法。归并过程中是不会改变元素的相对位置的。 
    4、缺点是,它需要O(n)的额外空间。但是很适合于多链表排序。 


     

    /**

     * @author Administrator

     * 并归排序法

     */

    public class MergeSort {

     

    /**

    * @param args

    */

    public static void main(String[] args) {

    int[] data = { 1, 7, 16, 21, 41, 42,46, 52 ,53,63,86,97,3,53};

    mergeSort(data, 0, data.length - 1); // 

    printData(data);

     

    }

     

     

     

    private static void mergeSort(int[] data, int low, int high) {

    if(low>=high){

    return ;

    }

     

    int mid = (low+high)/2;

    mergeSort(data,low,mid);

    mergeSort(data, mid+1, high);

    merge(data,low,mid,high);

    }

     

    private static void merge(int data[],int low,int mid,int high){

    int [] temp = new int[high-low+1];

    int key = 0 ;

     

    int i = low;

    int j = mid+1;

    /**把data从low到high可以看成从mid分开的两个数组

    * 分别遍历两个数组,把最小值放入临时数组

    *  */

    for(;i<=mid && j<=high;key++){

    if(data[i]>data[j]){

    temp[key] = data[j];

    j++;

    }else{

    temp[key] = data[i];

    i++;

    }

    }

     

    /** 若从data[low] 到 data[mid]遍历完,则可能data[min+1]到data[high]的值还未遍历完

    * 并且这些值肯定比data[mid]大,且是有序的.直接追加到temp后即可 */

    if(i>mid){

    while(j<=high){

    temp[key]=data[j];

    key++;

    j++;

    }

    }

    /**同理上 */

    if(j>high){

    while(i<=mid){

    temp[key]=data[i];

    key++;

    i++;

    }

    }

     

     

    /**把temp数组的值并归回data数组 */

    setData(data,temp,low);

    }

     

    private static void setData(int []data,int []temp,int low){

    if(data.length<temp.length){

    return ;

    }else{

    for(int i = 0;i<temp.length;i++){

    data[low+i] = temp[i];

    }

    }

    }

     

    public static void printData(int[] data) {

    for (int i : data) {

    System.out.print(i + " ");

    }

    System.out.println();

    }

    }

     

    展开全文
  • 排序-直接插入排序

    2018-10-17 10:54:16
    排序一个作用就是可以采用查找效率较高二分查找法,其平均查找长度为log2(n+1)-1.而无序顺序只能进行顺序查找。其平均查找长度为(n+1)/2.  稳定:A和B关键字相等,排序前AB前,则排序后A、B先后...

    排序是计算机程序设计中的一种重要操作。它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。

    排序的一个作用就是可以采用查找效率较高的二分查找法,其平均查找长度为log2(n+1)-1.而无序的顺序表只能进行顺序查找。其平均查找长度为(n+1)/2. 

    稳定性:A和B的关键字相等,排序前A在B前,则排序后A、B的先后次序应保持不变,满足这一性质的排序算法称为稳定的。

    直接插入排序是一种最简单的排序方法。它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。

    输入:顺序表的长度,顺序表中各个元素。

    输出:排好序的顺序表中各个元素。

    运行结果:

    首先是辅助宏的定义:

    #define OK 1
    #define ERROR 0
    #define TRUE 1
    #define FALSE 0
    #define OVERFLOW -1
    #define NULL 0
    typedef char *InfoType;
    typedef int KeyType; //设关键字为整型

    顺序表的存储结构定义:

    typedef struct
    {
       KeyType key; //关键字
       InfoType otherinfo;//其他数据项
    }RedType;
    //顺序表的存储结构定义
    typedef struct
    {
       RedType *r; //r[0]一般做哨兵
       int length; //顺序表的长度
    }SqList;

    算法原理:

    首记录自身有序,从第二条记录开始,如果当前记录比左侧紧邻记录小,则备份记录到哨,从其左侧元素开始只要大就后移,均移动完毕后,哨中记录填入指针右侧位置。

    算法实现:

    void InsertSort(SqList &L)
    {
       /*直接插入排序
       首记录自身有序,从第2条记录开始,
       如果当前记录比左侧紧邻记录小,则备份当前记录到哨,
       从其左侧元素开始只要大就后移,均移动完毕后,
       哨中记录填入指针右侧位置*/
       int i,j;
       for(i=2;i<=L.length;i++)
       {
           if(L.r[i].key<L.r[i-1].key)
           {
               RedCopy(L.r[0],L.r[i]); //设置哨兵
               for(j=i-1;L.r[0].key<L.r[j].key;j--)
    	        RedCopy(L.r[j+1],L.r[j]); //记录后移
    	   RedCopy(L.r[j+1],L.r[0]); //插入到正确位置
           }
       }
    }

    复制元素r2到r1

    void RedCopy(RedType &r1,RedType r2)
    {
        //复制元素r2到r1
        r1.key=r2.key;
        r1.otherinfo=r2.otherinfo;
    }

    算法分析:

    平均情况下比较次数与移动次数为n^2/4

    时间复杂度O(n^2)

    空间复杂度O(1)

    是一种稳定的排序方法。

    展开全文
  • 1. 算法的基本概念 利用计算机算法为计算机解题的过程实际上是实施某种算法。 (1)算法的基本特征 算法一般具有4个基本特征:可行...对于长度为n的有序线性表,最坏情况下,二分法查找只需比较log2n次, 二级公共...
  • LeetCode解题总结

    2018-10-09 16:02:19
    7.2 排序数组查找给定值插入位置 7.3 二维排序数组查找给定值 7.4 旋转有序数组查找最小值 7.4.1 数组无重复 7.4.2 数组有重复 7.5 旋转排序数组查找指定数字 8. 暴力枚举法 8.1 求集合子集 8.2...
  • 试设计一算法,将x插入到线性表的适当位置上,以保持线性表的有序性。 2、用向量作存储结构,试设计一个算法,仅用一个辅助结点,实现将线性表的结点循环右移k位的运算。 3、用向量作存储结构,试设计一个算法,仅...
  • 《数据结构》实验

    2012-04-09 21:39:46
    试设计一算法,将x插入到线性表的适当位置上,以保持线性表的有序性。 2、用向量作存储结构,试设计一个算法,仅用一个辅助结点,实现将线性表的结点循环右移k位的运算。 3、用向量作存储结构,试设计一个算法,仅...
  • 4种查找算法

    2017-12-31 18:10:29
    一、查找基本概念 查找,也可称检索,是大量数据元素中找到某个特定数据元素而进行的工作。查找是一种操作。   二、顺序查找 ...说白了就是,从头到尾,一个一个地比,找着相同就成功...在有序表中,取...

     一、查找的基本概念

    查找,也可称检索,是在大量的数据元素中找到某个特定的数据元素而进行的工作。查找是一种操作。

     

    二、顺序查找

     

    说白了就是,从头到尾,一个一个地比,找着相同的就成功,找不到就失败。很明显的缺点就是查找效率低。

    【适用性】:适用于线性表的顺序存储结构和链式存储结构。

    平均查找长度=(n+1)/2.

    时间复杂度为O(n)。

     

    三、折半查找

    在有序表中,取中间元素作为比较对象,若给定值与中间元素的关键码相等,则查找成功;若给定值小于中间元素的关键码,则在中间元素的左半区继续查找;若给定值大于中间元素的关键码,则在中间元素的右半区继续查找。不断重复上述查找过程,直到查找成功,或所查找的区域无数据元素,查找失败。

    时间复杂度为O(logN)。

     

    有序表按关键码排列如下:

    7,14,18,21,23,29,31,35,38,42,46,49,52

    在表中查找关键码为14 的数据元素:

     

     

     

    四、B树

    B树又称二叉排序树(Binary Sort Tree)。

    1、概念:

       它或者是一棵空树;或者是具有下列性质的二叉树:

      (1)若左子树不空,则左子树上所有结点的值均小于左子树所在树的根结点的值;

      (2)若右子树不空,则右子树上所有结点的值均大于右子树所在树的根结点的值;

      (3)左、右子树也分别为二叉排序树;

    2、B树的查找:

    时间复杂度与树的深度的有关。

      步骤:若根结点的关键字值等于查找的关键字,成功。

      否则:若小于根结点的关键字值,递归查左子树。

      若大于根结点的关键字值,递归查右子树。

      若子树为空,查找不成功。

    3、B树的插入:

    首先执行查找算法,找出被插结点的父亲结点。

      判断被插结点是其父亲结点的左儿子还是右儿子。将被插结点作为叶子结点插入。

      若二叉树为空。则首先单独生成根结点。

      注意:新插入的结点总是叶子结点,所以算法复杂度是O(h)。

    4、B树的删除:

      如果删除的结点没有孩子,则删除后算法结束;

      如果删除的结点只有一个孩子,则删除后该孩子取代被删除结点的位置;

      如果删除的结点有两个孩子,则选择该结点的后继结点(该结点右孩子为根的树中的左子树中的值最小的点)作为新的根,同时在该后继结点开始,执行前两种删除算法,删除算法结束。

     

    5、B+树

    一棵m阶的B+树满足下列条件:

    (1)每个结点最多m个孩子。

    (2)除根结点和叶子结点外,其它每个结点至少有ém/2ù个孩子。

    (3)根结点至少有两个孩子。

    (4)所有的叶子结点在同一层,且包含了所有关键字信息。

    (5)有k个孩子的分支结点包含k个关键字。

    例如:

    五、散列(hash)表

    关键字:哈希函数、装填因子、冲突、同义词;

     

    关键字和和存储的地址建立一个对应的关系:

    Add = Hash(key);

     

    解决冲突方法:

    开放定址法 – 探测方式:线性探测、二次探测。

    分离链接法 – 利用链表的方式。

     

    查找找效率不依赖于数据长度n,查找效率非常快,很多能达到O(1),查找的效率是a(装填因子)的函数,而不是n的函数。因此不管n多大都可以找到一个合适的装填因子以便将平均查找长度限定在一个范围内。

     

    参考链接:http://www.cnblogs.com/foreverking/category/349201.html

    展开全文
  • 数据结构实验

    2012-04-13 09:55:47
    熟练掌握二分查找算法并能在有序表中进行查找操作。 2. 掌握Hash表相关算法。 二 、实验要求 1.认真阅读和掌握和本实验相关教材内容。 2.复习顺序表及二叉树基本操作过程。 3.编写完整程序完成下面实验...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    3、从终端读入字符集大小为n(即字符个数),逐一输入n个字符和相应n个权值(即字符出现频度),建立哈夫曼树,进行编码并且输出。 注:可用C或C++编写。 4、用邻接矩阵或邻接图实现一个有向图...
  • 2.2.4 int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值原数据第一个元素0下标。 2.2.5 写一个程序, 要求...
  • 6、 向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动( )个元素。 7、向一个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动 个元素。 8、顺序表中插入或删除一个元素,需要平均...
  • 第四部分是每日一题,每日一题是交流群(包括微信和 qq)里进行的一种活动,大家一起 解一道题,这样讨论问题更加集中,会得到更多反馈。而且 这些题目可以被记录下来,日后会进行筛选添加到仓库题解模块。 ...
  • 但是这样简单应用生产难免不出问题,所以,我们需要介绍一下Spring我们提供线程池技术ThreadPoolTaskExecutor 其实,它实现方式完全是使用ThreadPoolExecutor进行实现(有点类似于装饰者模式。当然...
  • 12、 已知一个顺序表中的元素按元素值非递减有序排列,编写一个函数删除表中多余值相同元素。 13、 分别写出求二叉树结点总数及叶子总数算法。 分治术 14、 有金币15枚,已知其中有一枚是假,而且它重量...
  • 将得到一个最接近cap的且2 ^ n的数值 return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1; } </code></pre> 写入数据 <pre><code>java final V putVal(int hash, K key, V...
  •  第3版与前两版相比,几乎被完全重新组织和改写,但是基本教学理念没有改变: 我们坚信计算机图形学是实际使用学习到,一定要动手编写程序并进行测试,才能真正地掌握计算机图形学。本书一个主要目标就是...
  • 日期类型 date 7字节 用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日,7个字节分别表示世纪、年、月、日、时、分和秒 二进制数据类型 row 1~2000字节 可变长二进制数据,具体...
  • 定义 数组是一种排列有序的数据结构,包含于数组中的变量被称为数组元素, 它们都有相同类型。 数组声明 int [] array1 = new int[5]; int [,,] array3 = new int[10,20,30]; int [] array1 = new int[] {1,2,4}...
  • 需求分析是当前软件工程中的关键问题,需求分析阶段任务是:可行分析基础上,进一步了解、确定用户需求。准确地回答 “系统必须做什么?” 问题。获得需求规格说 明书。还涉及到软件系统目标、软件系统...
  • 主串s=”00000000000000000000000000000000000000000000000001”,而要匹配子串t=”0000000001”,……匹配时,每次都得将t字符循环到最后一位才发现,哦,原来它们是不匹配。 5.7kmp模式匹配算法 135 ...
  • 主串s=”00000000000000000000000000000000000000000000000001”,而要匹配子串t=”0000000001”,……匹配时,每次都得将t字符循环到最后一位才发现,哦,原来它们是不匹配。 5.7kmp模式匹配算法 135 ...
  • 予我耐心解答老师和同学,是他们我小程序成功起到了关键性的作用,那么多个日夜,如此多困难,同学们勤恳塌实,从开始到结束,没有显出一点倦意,始终热情高涨,我感谢这种氛围,感谢学校提供良好条件。...
  • 指针变量加或减一个整数n的意义是把指针指向的当前位置(指向某数组元素)向前或向后移动n个位置。应该注意,数组指针变量向前或向后移动一个位置和地址加1或减1 概念上是不同的。因为数组可以有不同的类型, 各种...

空空如也

空空如也

1 2
收藏数 38
精华内容 15
关键字:

在长度为n的有序性表中进行