数据结构-列表

1.Listnode(节点)

节点相当于是装数据的车厢,因此也要进行一定的封装

其中的成员变量包括T类型的数据,以及两个指向节点类的指针。(这有个很有意思的现象,定义的过程中用到了指向自身的指针,到底是先有鸡还是现有蛋)

操作接口有两个,前插入和后插入

2.List(列表类)

成员变量有三个,一个是和向量类似的size,还有两个分别是头哨兵和尾哨兵(节点类指针)。列表是寻地址访问,向量是寻秩访问(秩是逻辑上的顺序),列表也可以寻秩访问(重载【】,但是效率很低,所以虽然可以把列表当向量用,但是别用,考虑到效率,向量肯定更快)像查找、插入这类的操作,向量返回的是不大于的最大的秩,而列表返回的是位置。其实给定一个节点类的指针,那么它对应一个列表

3.查找

有序列表无法适用二分查找等向量使用的方法,因为无法在常数时间内寻秩访问

4.排序

选择排序:可以看作冒泡排序的改进版,移动的次数减少,O(n^2)主要来源于比较。但是输入不敏感,冒泡排序改进版最好情况O(1).

同时可以改进为堆排序,选取最大值的函数可以用堆来代替,每次只要logn,综合下来nlogn。

循环节:如果选择最大的和最后一个交换,那么有多少个循环节就有多少个无效交换。

插入排序:

输入敏感,和逆序对数目相关

归并排序:

输入的是起点加长度,输出的排序完后的列表由输入的那个起点表示。(用来统计逆序对数目?)

5.游标实现

其实就是定义两个数组(),一个存放数据,一个存放地址,其中地址用数组的秩来表示。同时用两个变量来维护插入、删除等操作。free表示的是空余空间链表的首个地址,data白哦是的是后插入的节点的末地址(列表方向向前),当插入一个元素时,首先访问free,可以得到插入的地址在哪(free转向下一个值,即link表中的值),在相应位elem中计入数据,同时在link中填入上一个data值,同时更新data值为当前地址。删除操作将free值变成删除元素地址,同时link值变为之前的free值,同时将指向该元素的元素的link值变为删除元素的link值。(其实要实现列表,要满足二点,一是可以找出存放数据(包括地址)的空间,二是地址可以标识,用两个数组和两个标识变量就可以实现

6.序列sequence

向量和列表是序列的不同实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值