数据结构——顺序表
来源:互联网 发布:固态硬盘测试软件 编辑:程序博客网 时间:2024/05/21 05:36
这是个人写的第一篇博客,有些言语不顺的地方,请见谅,有讲的不对的地方,请指点下。
=====================================================================================================
在讲顺序表之前要说线性表,线性表包含很多,顺序表,链表,队列,栈等都属于线性表。
线性表的定义如下:线性表(linear list) 是n个类型相同的数据元素的有限序列。首先:线性表存储的都是同一类型的的元素,例如:int,char等数据类型,也可以student类型;其次:是有限的,我的理解是线性表的容量受限于硬件条件,即使线性表可以根据元素的多少进行自由扩容,但数据的最终还是写入硬件中。然后是序列:百度上解释“在数学上,序列是被排成一列的对象(或事件);这样每个元素不是在其他元素之前,就是在其他元素之后。这里,元素之间的顺序非常重要”这个解释已经是表现出线性表线性的特点,线性表之间存在着序偶关系,除了表头只有直接后驱,表尾只有直接前驱,其他元素都同时存在直接前驱与直接后驱。线性表到此为止。
顺序表:是线性表中的一种子类型,用Java的话来说,说顺序表继承/实现了线性表。同时顾名知意,顺序表是用一组地址连续的存储单元存储的,我的理解是像数组,同时我也是用数组来实现顺序表的;
顺序表的实现:
第一:顺序表是数据的容器,所以必须有数据的增删改查;所以写
public interface ArrayList<T> { /** * 清空顺序表 * @return 返回一个空的数组 */ T[] enptyList(); /** * 往顺序表中添加数据 */ void add(T t); /** * 在顺序表中第i个元素后插入一个元素 * @return 加入成功返回加入元素后的以数组返回顺序表内的元素 */ T[] insertData(int i,T t); /** * 从顺序表中删除第i个元素 * @return 删除后返回被删除元素 */ T deleteData(int i); /** * 查询顺序表内所有数据,以集合存储 * @return 返回以数组返回顺序表内的元素 */ T[] selectAll(); /** * 根据下标找元素 * @return 一个元素 */ T selectData(int i); /** * 根据元素找到元素的位置 * @return int */ int selectIndex(T t); /** * 根据下标将该元素替换为参数元素 * @return 返回被替换元素 */ T replaceData(int i,T t); /** * 顺序表的实际长度 * @return int */ int lenthList(); }第二:就是实现接口了:
public class ArrayListImpl implements ArrayList<Integer> { private Integer[] data = null; private int size; private int length = 0; private ArrayListImpl() { } /** * 通过构造函数创建数组来存储顺序表的数据 * * @param size */ public ArrayListImpl(int size) { this.size = size; this.data = new Integer[this.size]; } @Override public Integer[] enptyList() { this.data = null; // 直接将数组置换为null;第一次是下,理论上应该可以 return this.data; } @Override public void add(Integer obj) { if(this.length<this.size){ this.data[this.length] = obj; // 顺序表的初始长度为0;当加入一个元素是长度+1 this.length++; }else{ System.out.println("表已满"); } } @Override public Integer[] insertData(int i,Integer obj) { if(this.length<this.size){ int j = this.length; while(j>i){ this.data[j] = this.data[j-1]; j--; } this.data [i] = obj; this.length ++; }else{ System.out.println("表已满"); } return this.data; } @Override public Integer deleteData(int i) { Integer obj = null ; if(this.length != 0){ if(0 <= i && i<this.length-1){ obj = this.data[i]; for ( ; i < data.length-1; i++ ) { this.data[i] = this.data[i+1]; } this.data[this.length-1] = null; this.length--; }else { System.out.println("该元素不在范围内"); } } else { System.out.println("顺序表为空"); } return obj; } @Override public Integer[] selectAll() { // TODO Auto-generated method stub return this.data; } @Override public Integer selectData(int i) { // TODO Auto-generated method stub return this.data[i]; } @Override public int selectIndex(Integer obj) { for(int i=0;i<this.length;i++){ if(this.data[i] == obj){ return i; } } return -1; } @Override public Integer replaceData(int i,Integer obj) { Integer rep ; if(this.length != 0){ if(0 <= i && i<this.length-1){ rep = this.data[i]; this.data[i] = obj; return rep; }else { System.out.println("该元素不在范围内"); } } else { System.out.println("顺序表为空"); } return null; } @Override public int lenthList() { // TODO Auto-generated method stub return this.length; }}
顺序表实现后感想:做了个东西总会有些想法,首先就是整个顺序表都是用数组来实现的,而且没有复杂的逻辑,为什么要费这功夫;这就会想到jdk的ArrayList,不能说这个顺序表是实现了ArrayLIst,起码我认为ArrayList的本质上就是一个顺序表,只不过功能更加齐全,代码结构更优秀的一个实现,在平时的使用中ArrayList的使用频率完全不低于数组,想了想,想法就这些。
阅读全文
0 0
- 数据结构—顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构—顺序串
- 数据结构——顺序表有序顺序表归并
- 数据结构——顺序表有序顺序表查询
- 顺序表的插入——数据结构
- c#数据结构学习——顺序表
- 数据结构的实现——顺序表
- C++数据结构——顺序表
- Android游戏开发之单点触摸与多点触摸
- Spring多数据源切换
- DES对字符串的加密
- 进入/退出layer的先后顺序
- jQuery获取窗口大小 及窗口大小改变时执行代码
- 数据结构——顺序表
- 如果移动一个精灵,让它也到你手指移动到的位置
- 华为OJ——配置文件恢复
- HTTP响应报文
- 数据结构的七种排序
- AK消防 注册消防工程师 要点汇总 建筑消防性能化防火设计
- 点击按钮(Button、MenuItemSprite)
- Linux C++ 实现简易小型的Web服务器httpd
- lambda expressions are not supported at this language level解决方法