数据结构-单链表

1.数据结构

程序 = 算法 + 数据结构

    数据 data 
        对客观事物的符号表示
        在计算机学科中 指所有事物可以输入到计算机中并被计算机进行处理的符号的总称

        数据元素 data element 
            是数据的基本单位,在计算机中通常是作为一个整体来进行考虑和处理
            一个数据元素可以由多个数据项(data item)来组成
            数据项是数据不可分割的最小单位 

            例子: 
                全班同学的基本信息      --  数据 
                张三的基本信息          --  数据元素 
                张三的年龄              --  数据项 

        数据对象 data object 
            是性质相同的数据元素的集合, 是数据的子集 

 结构: 
            数据元素之间的关系的不同特性 就称为结构  

        根据数据元素之间的关系的不同的特性, 通常分为以下4类基本结构: 

            (1)集合 
                结构中的数据元素之间 除了"属于某一个集合"的关系以外,没有其他任何关系 
                    11  234  88888  99977 ... 

            (2)线性关系 
                数据元素之间的关系是线性的  
                    int a[5] = {1,2,3,4,5};

            (3)树状结构 
                数据元素之间的关系是树状的(层次) 

            (4)网状结构(图)
                数据元素之间的关系是任意的

数据结构 
        研究数据本身 以及 数据元素之间的关系(逻辑关系) 

        数据结构的形式定义: 
            一个二元组: 
                Data_structure = { D, S } 
                        D : 是数据元素的有限集 
                        S : 是D上的关系的有限集

                结构定义中"关系" 描述的是数据元素之间的逻辑关系 
                    因此 称为数据的逻辑结构 

                数据结构在计算机中的表示 称为数据的物理结构, 或者 存储结构 

                    逻辑结构的是一个虚的"想法" 
                    存储结构(物理结构)是真实存在 

2.线性关系
例子: 
    数据元素                        数据元素之间的线性 
      26个英文字母: abcedfg         单个字符a必须在字符b的前面 
      班级学号: 1001,1002,1003..    学号的顺序1001必须在1002的前面
      ... 
​
线性表: 
    线性表中的数据元素可以是各种各样的类型 
        但是 同一个线性表中的元素必定具有相同的属性 , 以及 
            属于同一个线性表中的相邻的两个数据元素之间存在序偶关系 
​
        若 将线性表记为: 
            a1, a2, a3, a4, ... an 
​
        (1)存在唯一一个被称为 "第一个" 的数据元素 
        (2)存在唯一一个被称为 "最后一个" 的数据元素 
        (3)除了第一个以外, 集合中的每一个元素都有一个且仅有一个 "前驱元素"
        (4)除了最后一个以外, 集合中的每一个元素都有一个且仅有一个 "后继元素"
    例子: 
        1 3 5 7 9 11 .... 
        对于该线性表 在计算机中如何存储呢?  
            要保存什么东西? 
                数据 
                关系(逻辑关系)
​
            int a[] = {1,3,5,7,9,11};  

线性表的物理结构的实现: 

    (1)顺序结构     --> 数组 
        线性表的顺序表示 指的是用一组地址连续的存储单元,依次存放线性表中的每一个数据元素  

        数据的存储 逻辑关系和物理关系是一致的 

        基本操作: 增删改查  
                    (数组: 插入有序,二分查找,排序)

(2)链式结构 (链表)
        线性表的链式结构 指的是不用地址连续的存储单元去存储元素 
                        (数据元素的存储单元不一定连续的)

            在保存数据元素的同时,还需要额外开辟一个空间 保存"逻辑关系"的上一下或者下一个 

            例子: 
                1,3,5,7,9 

                存储数据元素 1 
                    1   数据要存储         int      (数据) 
                    &3  下一个元素的地址    *       (关系)

                存储数据元素 3 
                    3   数据要存储         int      (数据)
                    &5  下一个元素的地址    *       (关系)

                ...         

构造一个数据元素的数据类型, 把上面是数据存储  

            typedef int ElemType;   //数据元素中 数据的类型
            struct node             //数据元素的类型
            {
                ElemType data;          //数据域  --> 存储数据 
                struct node * next;     //指针域  --> 保存逻辑上的关系(下一个)
            };

            或者 
                typedef struct node             
                {
                    ElemType data;
                    struct node * next;
                } Node;                     

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值