精华内容
下载资源
问答
  • 数据结构中的有序和无序 文章开头首先感谢正在学C++博主 个人最起始的迷惑 我的迷惑来自有序列表这个名词。 在我的印象中有序的数据结构是可以保留插入顺序的一种数据结构。而无序则是指在插入数据时进行了排序、...

    数据结构中的有序和无序

    文章开头首先感谢正在学C++博主

    个人最起始的迷惑

    我的迷惑来自有序列表这个名词。

    在我的印象中有序的数据结构是可以保留插入顺序的一种数据结构。而无序则是指在插入数据时进行了排序、去重等操作的数据结构。

    正是因为这个迷惑让我开始了对于有序和无序的思考。

    以Python的list和JavaScript的Array为例来说,以下的数据是有序还是无序

    # py
    arr = [1,3]
    arr.append(2)
    print(arr) #[1,3,2]
    
    // JavaScript
    let arr = [1,3];
    arr.push(2);
    console.log(arr); // [1,3,2]
    

    下面是疑惑点

    • 如果说上面的是有序的,则可以认为是下标拥有排列顺序
    • 如果说上面的是无序的,则可以认为是值无排列顺序,所以是无序的

    正在学C++进行讨论

    机缘巧合下,我发现正在学C++博主发布了很多有关算法的博客,本能的觉得老哥铁定知道,然后厚着脸皮向老哥留言了。没想到老哥竟然回复我了,哈哈。

    原讨论地址,讨论内容在评论区

    这里对讨论内容进行整理

    • Q:

      对于数据结构而言, 有序和无序是指插入元素的顺序还是元素的排列顺序(如从小到大)

    • A:

      任意给一组数,可以说这组数是有序(小到大/大到小)或无序(乱序)的,然后对这组数进行排序使得它按照一个顺序排列。插入元素的顺序,怎么叫有序怎么叫无序?你可以说,对于一组有序的数,把另一个单独的数插入到这组数中使得这组数依旧有序。

    • Q:

      或许是考虑的角度问题,我下面举一个具体一点例子:

      有序链表,此处的有序为元素有排列顺序, 但是有序链表其实是一个无序的数据结构

      数据结构的有序无序是以插入元素的顺序来看的。

      如果在插入元素时 如同set数据结构一样进行了去重, 或者进行了排序打乱了插入的元素, 则认为该数据结构是无序的。

      如同python的list一样,很多人的介绍是一个有序可变的序列

    • A:

      我学习的严蔚敏老师的数据结构中,有序就是指一组数,按某个关键字有序排列,就是有序。

      可以有重复值,可以插入,可以删除,但是有序无序与这些操作没关系。

      有序无序,指的是整体的元素关键字是否按照某个顺序。

      你说的有序链表,我理解的意思是,一组数的逻辑结构是线性的,物理结构是链式存储。我没有懂你说的“有序为元素有排列顺序, 但是有序链表其实是一个无序的数据结构”。

      数据元素相互之间的关系,存在着四种逻辑结构和四种物理结构。你说的是什么数据结构?

      还有,有序无序是以插入元素的顺序来看的,我不懂,可以插入在末尾、在中间在任何一个位置,怎么判断有序无序?

      (个人补充:当我看到可以插入在末尾、在中间在任何一个位置的时候又蒙了,随后看到了老哥在问答中的回答后就明白了)

    • Q:

      讲的很透彻,我大概明白所谓的有序和无序应该站在从什么角度去理解了。谢谢您。


    下方为正在学C++老哥在问答上的回答,原文地址

    • Q:

      数据结构中的有序和无序是如何理解的?

      以JavaScript为例

      let arr = [1,3];
      arr.push(2);
      console.log(arr); //[1,3,2]
      

      上方的数组是一个有序的还是无序的呢?

      如果是有序的则可以理解为是以插入顺序来看的;

      如果是无序的则可以理解为是以值的排序顺序来看的;

      目前在看数据结构, 看到有序链表这一块有点懵, 感觉有序和无序的定义很模糊.

    • A:

      这一般来说是无序的。

      排序,是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。

      如果你的关键字是元素的大小,就是无序的。

      如果你为每个元素增加一个属性:位置,1的位置是1,3的位置是2,2的位置是3,且关键字是每个元素的位置,那就是有序。

    总结

    判断有序和无序需要辩证地来说。

    以上面的例子来说:

    let arr = [1,3];
    arr.push(2);
    console.log(arr); //[1,3,2]
    

    如果站在值的角度来说这个数组为无序的,因为它没有对数据进行排序,数据依然是以乱序排列的

    如果站在数组本身的实现逻辑的角度来说,它是有序的,因为可以按照索引进行取值,并且索引是有序的

    有序集合:集合里的元素可以根据key或index访问
    无序集合:集合里的元素只能遍历。

    编程是一个不断试错的过程,在这个过程中感谢每一个帮助过我的人,每一个把自己的理解和学习心得无私分享出来人。

    如果文章中有不对的地方请您在评论区指出来,我会及时改正。

    文章的末尾再次感谢正在学C++博主。

    展开全文
  • 其实有序和无序树的概念很简单,我们来康康: 有序树的定义:若将树中每个结点的各子树看成是从左到右有次序的(即不能互换),则称该树为有序树(Ordered Tree) 无序树的定义:若将树中每个结点的各子树从左到右是...

    其实有序树和无序树的概念很简单,我们来康康:

    有序树的定义:若将树中每个结点的各子树看成是从左到右有次序的(即不能互换),则称该树为有序树(Ordered Tree)

    无序树的定义:若将树中每个结点的各子树从左到右是没有次序的(即可以互换),则称该树为无序树

     

    比如我们有这样的例子,在Linux操作系统当中,文件都是以一定的次序排列的,比如在同一个文件夹下的文件,他们一定会以一定的顺序进行排列,比如按照数字的大小顺序或者按照英文字母的顺序进行排列,如下图所示:

     

     

     

     

     我们可以看到在homework文件夹下,homework就可以看作是一个树结构当中的节点Node,下面的孩子节点分别是hw1,hw2.hw3她们是按照数字的顺序进行排列的。同样的,我们可以看另外一个有关有序树的例子:

     

     这也是一个典型的有序树的例子。

     

     

    展开全文
  • 【数据结构有序和无序树的区别

    万次阅读 多人点赞 2017-07-20 16:42:43
    这个问题想了好久才弄清楚,现在总结一下。 概念是这样的: ...换而言之,兄弟结点有顺序的树,称为有序树,兄弟之间无顺序的树称为无序树。 那么,3个结点到底能组成多少种有序树,多少
    这个问题想了好久才弄清楚,现在总结一下。

    概念是这样的:

    有序树
    树中任意节点的子结点之间有顺序关系,这种树称为有序树

    无序树
    树中任意节点的子结点之间没有顺序关系,这种树称为无序树,也称为自由树

    换而言之,兄弟结点有顺序的树,称为有序树,兄弟之间无顺序的树称为无序树。

    那么,3个结点到底能组成多少种有序树,多少种无序树呢?

    先看无序树,兄弟无序,但是父子还是有序的
    假设有A、B、C三个结点,总共可以组成 9 种无序树,分别是:
    • 1个父节点,2个子结点的情况有 3 种
    • 链式结构有 6 种(因为链式结构相互之间都是父子关系,所以有 6 种不同的组合)

    理解了无序树,有序树也更好理解了
    有A、B、C三个结点,总共有 12 种有序树,分别是:
    • 1个父节点,2个子结点的情况有 6 种
    • 链式结构有 6 种

    三个结点组成的二叉树,种类就更多了,有 30

    下面的类型,每一个都有6种

    展开全文
  • 以JavaScript为例 <code class="language-javascript">let arr = [1,3]; arr.push(2); console.log(arr); //[1,3,2]</code></...目前在看数据结构, 看到有序链表这一块有点懵, 感觉有序和无序的定义很模糊.</p>
  • 查找引入 在大数据时代,如何在海量数据中快速检索到自己想要的数据?首先需要设计高效的数据...符号表线性存储数据,但是根据在插入操作过程中是否保证数据有序分为无序和有序表: 0.无序无序表API(仅实现了...

    查找引入

    在大数据时代,如何在海量数据中快速检索到自己想要的数据?首先需要设计高效的数据结构来表示这些数据,要存储的数据一般分为两个部分,键和值,如何根据键值去安排这些数据尤为重要,首先我们想到线性存储,即利用表的形式线性存储,线性查找,即符号表这种数据结构.

    符号表

    符号表线性存储数据,但是根据在插入操作过程中是否保证数据有序分为无序表和有序表:

    0.无序表

    无序表API(仅实现了插入,查找操作):

    template <typename Key,typename Value> struct Node{
        Key key;
        Value val;
        struct Node<Key,Value> *next;
        Node(){next=NULL;}
    };
    template <typename Key,typename Value> class SequentialST{
    public:
        struct Node<Key,Value> *first;
    
    public:
        SequentialST(Node<Key,Value> *first){
    
            this->first=first;
        }
        void get(Key key,Value &val){
            for(Node<Key,Value> *x=first;x!=NULL;x=x->next)
                if(key==x->key)
                    val=x->val;
            return;
        }
        void put(Key key,Value val){
            for(Node<Key,Value> *x=first;x!=NULL;x=x->next)
                if(key==x->key)
                {
                    x->val=val;
                    return;
                }
            Node<Key,Value> *x=new Node<int,char>();
            x->key=key;
            x->val=val;
            x->next=first;
            first=x;
    
        }
    
    };

    1.有序表

    有序表API(rank函数为键为k的值在表中的排名):

    template <class Key,class Value> class BinarySearchST{
        private:
            Key *keys;
            Value *vals;
            int N;
        public:
            BinarySearchST(int capacity){
                keys=new Key(capacity);
                vals=new Value(capacity);
                N=0;
            }
            int size(){
                return N;
            }
            bool isEmpty(){
                return N==0?true:false;
            }
            void get(Key key,Value &val){
                if(isEmpty()) return;
                int i=rank(key);
                if(i<N&&keys[i]==key)
                    val=vals[i];
                else
                    return;
            }
            int rank(Key key){
                int lo=0,hi=N-1;
                while(lo<=hi){
                    int mid=lo+(hi-lo)/2;
                    if(keys[mid]<key)
                        lo=mid+1;
                    else if(keys[mid]>key)
                        hi=mid-1;
                    else
                        return mid;
                }
                return lo;
            }
            void put(Key key,Value val){
                int i=rank(key);
                if(i<N&&keys[i]==key){
                    vals[i]=val;
                    return;
                }
                for(int j=N;j>i;j--){
                    keys[j]=keys[j-1];
                    vals[j]=vals[j-1];
                }
                keys[i]=key;
                vals[i]=val;
                N++;
            }
    };

    比较分析

    数据结构 特点
    无序表(链表或数组) 插入和查找均为线性时间,耗时长,适用于小型数据量
    有序表(有序数组) 查找较快,可以执行有序的相关操作,但插入操作很慢
    展开全文
  • 本节学习HTML中的列表元素,列表形式在网站设计中占有比较大的比重,显示信息非常整齐直观,便于用户理解。在后面的CSS样式学习中将大量使用到列表元素的高级作用。 用于组织数据的列表 ...顾名思义,无序列表
  • Java实现有序数组和无序数组

    千次阅读 2018-09-05 20:03:38
    可以采用顺序存储结构和链式存储结构表示线性表。数组是实现顺序存储的基础。在程序设计语言中,数组是一种构造数据类型。          时间复杂度表:   增加 查找 删除 更改 ...
  • 文章目录无序数组和有序数组比较无序数组特点有序数组特点代码实现自己的数组无序数组有序数组 无序数组和有序数组比较 无序数组 增:在数组最后插入 删:找到元素;改为null;后面的元素逐一前移 查:从第一项元素...
  • 只是看看套路,没有深入练习。 如果真要自己写,可以基于此类。 但其实,在普通使用中,这样实现的性能,并没有python原生的列表性能好。 因为python原生列表的功能,是基于数组作扩展实现的。...
  • 参考资料 《算法(java)》 — — Robert Sedgewick, Kevin Wayne 《数据结构》 — — 严蔚敏 这篇文章主要介绍实现字典的两种方式 有序数组 无序链表 (二叉树的实现方案将在下一篇文章介绍) ...
  • 无序表 class Node: def __init__(self, nitdata): self.data = initdata self.next = None def getData(self): return self.data def getNext(self): return self.next def setData(self,new...
  • 用于组织数据的列表 ...在后面的CSS样式学习中将大量...顾名思义,无序列表就是列表结构中的列表项没有先后顺序的列表形式。大部分网页应用中的列表均采用无序列表,其列表标签采用<ul></ul>,编写方法如下:  <li
  • 数组:数组存储具有相同数据结构的元素集合,一维数组占有一块内存空间,数组一旦占用存储空间(连续),其地址容量就是确定的,不能改变。 下面是详细的代码实现结果: package array; import java.util....
  • (1-x)LiFe5O8-xLi2ZnTi3O8尖晶石结构固溶陶瓷的有序无序相变磁介电性能
  • 实现迭代器的关键就是Node类的next成员变量,不停地找下一个节点,直到为next为null 2.2 有序数组中的二分查找 2.2.1 基本思想 它使用的数据结构是两个平行的数组分别存储键值,即如果两个数组下标相就意味着他两...
  • 如上所述,无序列表的结构是项的集合,其中每个项保持相对于其他项的相对位置。下面给出了一些可能的无序列表操作。 List() 创建一个新的空列表。它不需要参数,并返回一个空列表。 add(item) 向列表中添加一个新...
  • 2. 必须采用顺序存储结构。 基本思想: 在有序表中,取中间记录作为比较对象, 若给定值与中间记录的关键码相等,则查找成功。 若给定值小于中间记录的关键码,则在中间记录的左半区继续查找; 若给定值大于...
  • 我们将其与List有序集合接口Set无序集合接口放在一起讲解一下,主要目的是通过数据结构的讲解,让大家理解List集合的实现原理。 当我们用容器类的时候,就已经使用了数据结构。为什么Array...
  • 数据结构无序

    2018-03-18 22:19:00
    基本术语: 节点的度:书中某一节点拥有的子节点数量。 数的度:该树中所有节点的度的最大值。 叶节点(终端节点):度为零的节点。 ...分支节点(非终端节点):度不为零的节点。...有序和无序树:若树...
  • 单链表的增删改查,包含有序无序、重复不重复,给出了数据结构,以及增删改查的源代码
  • 有序和无序:这里的有序和无序不是指集合中的排序,而是是否按照元素添加的顺序来存储对象。 Map: Map是无序的,它的存储结构是哈希表<key,value>键值对,map中插入元素是根据key计算出的哈希值来存储元素的...
  • 1、从有序顺序表中删除其值在给定值s与t之间(要求s<t)的所有元素,如果s或t不合理或顺序表为空,则显示出错信息并退出运行。 注意:在读下面代码时,注意一下"L.length=i;"这里的注释,有助于理解线性表中位序...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,518
精华内容 1,007
关键字:

有序结构和无序结构