数据结构-----线性表

线性表:属于数据结构的一种,它的逻辑结构是线性结构。顺序表的元素序号是从1开始的而不是0。

 线性表需要实现的基本操作:

线性表的物理存储有两种方式为顺序存储和链式存储。其中顺序存储分为静态分配和动态分配,静态分配是指,线性表创建后它的大小不可改变而动态分配可以改变。

顺序存储(顺序表)---静态分配:

 静态分配是用数组这种数据结构来实现的,定义一个数组并指明长度这样就在内存中获得了一片连续的存储空间。这些空间就是用来存储顺序表的数据的,只是数组的长度定义后就不可改变。

代码实现方式:

如果创建顺序表时没有对表中的各个元素进行初始化那么元素的值可能为一串不知名的数据,这些数据称为脏数据,是由于操作系统回收这片内存块时内存块的数据没有清理干净,分配给数组后又没有进行初始化对里面的值进行覆盖而是直接读取,这样就读取到了遗留下来的脏数据了 。

 顺序存储(顺序表)---动态分配:

采用动态分配的方式的化就不需要依靠数组这一数据结构了,而是定义了一个指针指向了分配的内存空间的起始地址,由于顺序表的各个元素的大小一样并且顺序存储所以就能根据起始地址+索引号*每个元素所占的字节数,直接定位到各个元素。

代码实现:

 顺序表如果采用动态分配的方式实现的话就可以改表顺序表的长度,原理是申请一片新的存储空间并把原先的数据迁入进新的存储空间中,并保存新的存储空间的起始地址,这样就完成了顺序表的扩充。

顺序表的基本操作----插入

 实现代码:

除了实现基本操作外还需要能对错误操作进行判断并阻止。

 判断的范围只所以是L.lenght+1是因为顺序表的各个元素只能顺序的紧靠着存储,所以元素和元素之间不能有空,所以插入的位置只能小于等于L.lenght+1,等于L.lenght+1的话就相当于在最末尾进行插入。

插入操作的时间复杂度

顺序表的删除操作: 

实现代码:

删除操作的时间复杂度:

查找操作分为两种一种是按位查找(就是按索引号查找)另一种是按值查找(就是看值相不相同) 。

查找操作---按位查找

如果顺序表是采用动态分配的方式的话,那么查找操作会和使用静态分配的方式有点不同。因为静态分配的方式是基于数组实现的,其中的读取数据和查找数据使用数组的方法即可。而动态分配的方式是采用指针来实现的,所以读取数据和查找数据也是需要依靠指针来实现。采用指针的方式查找数据也是想数组一样的表示方式L.data[i-1],不过背地里操作系统会根据指针所指的地址找到内存块的起始地址,在根据要读取的索引号计算出需要查找的数据的起始地址,然后在根据指针的数据类型决定读取多少字节的数据,如定义的是整形指针那么一个整形就占4个字节,操作系统找到数据存储的起始地址后,就会往后接着读取4个字节的数据,这样就把这个数据给完整的读取了。

按位查找的时间复杂度: 

 查找操作---按值查找

实现代码: 

按值查找的时间复杂度:

单链表:

单链表的定义-不带头节点:

 单链表的定义-带头节点:

两者对比: 

单链表的插入-按位序插入(带头节点):

单链表的插入-按位序插入(不带头节点):

 单链表的插入-插入到指定节点的后面(带头节点):

  单链表的插入-插入到指定节点的前面(带头节点):

 单链表的删除-按位序删除(带头节点):

 单链表的删除-指定节点的删除(带头节点):

 单链表的查找-按位查找:

  单链表的查找-按值查找:

单链表的建立-尾插法: 

单链表的建立-头插法: 

双链表:

双链表初始化: 

双链表插入: 

双链表删除: 

双链表遍历: 

 循环单链表:

 循环单链表初始化:

循环双链表: 

循环双链表初始化:​​​​​​​ 

 循环双链表插入:

循环双链表删除: 

静态链表: 

 

在静态链表中如果元素是最后一位则它的下一个元素的数组下标设为-1,当想往静态链表中插入数据时首先需要找到空闲空间,所以把空闲空间的数组下标设为-2(其它数字也行),这样只需通过遍历静态链表看它们的值是否等于-2即可知道那些是空闲空间。

 

顺序表和链表的比较: 

数据结构的基本操作一般为增删改查创销。

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值