线性表顺序表示和实现

线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。

线性表中比较重要的有顺序表、单向链表和循环链表。本文主要来谈谈顺序表的实现。

List.java       线性表的接口类

 1 package com.yeyan.linearlist;
 2
 3 /**
 4  * 线性表接口
 5  * @author yeyan
 6  * @date   2014-12-07
 7  *  * API:
 8  * isEmpty():                 判断该线性表是否为空
 9  * length():                  表长
10  * get(int index):            获得第index的元素
11  * add(int index, T element): 在index位置之后添加一个元素
12  * remove(index):             删除索引为index的元素
13  * clear() :                  清除线性表
14  *
15  */
16
17 public interface List<T> {
18     public boolean isEmpty();
19     public int length();
20     public T get(int index) throws Exception;
21     public boolean add(int index, T element) throws Exception;
22     public T remove(int index) throws Exception;
23     public void clear();
24 }

SeqList.java

  1 package com.yeyan.linearlist;
  2 /**
  3  * 顺序表实现类
  4  * @author yeyan
  5  * @date   2014-12-07
  6  * @param <T>
  7  */
  8
  9 public class SeqList<T> implements List<T> {
 10     // 一个基类数组
 11     private Object[] table;
 12     // 当前线性表长度
 13     private int size;
 14     // 最大长度
 15     private int maxSize;
 16     // 默认长度
 17     private final int defaultSize = 20;
 18     /*
 19      * 无参构造函数
 20      */
 21     public SeqList() {
 22         maxSize = defaultSize;
 23         this.size = 0;
 24         table = new Object[maxSize];
 25     }
 26     /**
 27      * 有参构造函数
 28      * @param size
 29      */
 30     public SeqList(int size) {
 31         maxSize = size;
 32         this.size = 0;
 33         table = new Object[maxSize];
 34     }
 35     /**
 36      * 获取元素个数
 37      */
 38     public int length() {
 39         return size;
 40     }
 41     /**
 42      * 是否为空
 43      */
 44     public boolean isEmpty() {
 45         return size == 0;
 46     }
 47
 48     /**
 49      * 获取索引为index的元素
 50      */
 51     public T get(int index) throws Exception {
 52         if(index < 0 || index > size){
 53             throw new Exception("paramether error!");
 54         }
 55         return (T)table[index];
 56     }
 57     /**
 58      * 添加一个元素到索引为index之后
 59      */
 60     public boolean add(int index, Object element) throws Exception {
 61         if(element == null) return false;
 62         if(size == maxSize){
 63             throw new Exception("linear size is full£¡");
 64         }
 65         if(index < 0 || index > maxSize){
 66             throw new Exception("parameter!");
 67         }
 68         //move element
 69         for(int i = size; i > index; i --){
 70             table[i] = table[i - 1];
 71         }
 72         table[index] = element;
 73         size ++;
 74         return true;
 75     }
 76     /**
 77      * 删除索引为index的元素
 78      */
 79     public T remove(int index) throws Exception {
 80         T element = (T)table[index];
 81         if(isEmpty()){
 82             throw new Exception("linear list is null£¡");
 83         }
 84         if(index < 0 || index > size - 1){
 85             throw new Exception("parameter error£¡");
 86         }
 87         //move element
 88         for(int i = index; i < size - 1; i ++){
 89             table[i] = table[i+1];
 90         }
 91         size --;
 92         return element;
 93     }
 94     /**
 95      * 清空顺序表
 96      */
 97     public void clear() {
 98         for(int i = 0; i < size; i ++){
 99             table[i] = null;
100         }
101         size = 0;
102     }
103 }

Test.java

 1 package com.yeyan.linearlist;
 2 /**
 3  * 顺序表测试类
 4  * @author yeyan
 5  * @date   2014-12-07
 6  */
 7 public class Test {
 8     public static void main(String[] args) throws Exception{
 9         SeqList<Integer> seqList = new SeqList<Integer>();
10         seqList.add(0, 100);
11         seqList.add(1, 102);
12         seqList.add(2, 104);
13         System.out.println(seqList.length());
14         System.out.println(seqList.isEmpty());
15         System.out.println(seqList.get(0));
16         System.out.println(seqList.remove(1));
17     }
18 }

顺序表操作的效率分析

顺序表的静态特性很好,动态特性很差,具体说明如下:

1,顺序表元素的物理存储顺序直接反映线性表元素的逻辑顺序,顺序表示一种随机存取结构。get()、set()方法的时间复杂度为o(1)。

2,插入和删除效率很低。如果在各个位置插入元素的概率相同,复杂度为O(n)。

时间: 2024-10-12 02:20:50

线性表顺序表示和实现的相关文章

算法之 线性表顺序结构

package math; import java.util.ArrayList; import java.util.List; //线性表顺序结构 public class LinearTable { public int len = 0; //线性表表长度 public List list; public int currentLen = 0; //构造方法,申请一个对应长度得 线性表 public LinearTable(int i){ this.list = new ArrayList(

线性表&gt;&gt;顺序表---&gt;逆置所有元素

1 /*顺序表中所有的元素逆置 2 * 3 */ 4 #include <iostream.h> 5 using namespace std; 6 7 int main(){ 8 void reverse_arr(int arr[],int n); 9 int a[]={0,1,2,3,4,5,6,7}; 10 int n=7; 11 reverse_arr(a,n); 12 for(int i=0;i<=n;i++){ 13 cout << a[i] << &q

数据结构与算法 1 :基本概念,线性表顺序结构,线性表链式结构,单向循环链表

[本文谢绝转载] <大纲> 数据结构: 起源: 基本概念 数据结构指数据对象中数据元素之间的关系  逻辑结构 物理结构 数据的运算 算法概念: 概念 算法和数据结构区别 算法特性 算法效率的度量 大O表示法 时间复杂度案例 空间复杂度 时间换空间案例 1)线性表: 线性表初步认识: 线性表顺序结构案例 线性表顺序结构案例,单文件版 线性表的优缺点 企业级线性表链式存储案例:C语言实现 企业级线性表链式存储案例:C语言实现 单文件版 企业级线性表链式存储案例,我的练习  线性表链式存储优点缺点

java实现数据结构-线性表-顺序表,实现插入,查找,删除,合并功能

package 顺序表; import java.util.ArrayList; import java.util.Scanner; public class OrderList { /** * @param args * @author 刘雁冰 * @2015-1-31 21:00 */ /* * (以下所谓"位置"不是从0开始的数组下标表示法,而是从1开始的表示法.) * (如12,13,14,15,16数据中,位置2上的数据即是13) * * 利用JAVA实现数据结构-线性表-顺

C++数据结构与算法_2_线性表 --顺序表的应用示例

h2.western { font-family: "Liberation Sans",sans-serif; font-size: 16pt; }h2.cjk { font-family: "微软雅黑"; font-size: 16pt; }h2.ctl { font-family: "AR PL UMing CN"; font-size: 16pt; }h1 { margin-bottom: 0.21cm; }h1.western { fon

C++数据结构与算法_1_线性表 --顺序表的实现与分析

顺序表的实现与分析 引 --线性表的抽象基类: template <typename T> class LinearList { public: LinearList(); ~LinearList(); virtual int Size() const = 0; //返回线性表所能够存储的最大长度 virtual int Length() const = 0; //当前线性表的长度 virtual int Search(T &x) const = 0; virtual int Loca

数据结构线性表顺序结构的实现

package com.he.list; import java.util.Arrays; import org.w3c.dom.ls.LSException; class ArrayList { private int length;// the list's length private int[] store;// store the data // initialize an empty list public ArrayList initList(String name) { retu

数据结构----线性表顺序和链式结构的使用(c)

PS:在学习数据结构之前,我相信很多博友也都学习过一些语言,比如说java,c语言,c++,web等,我们之前用的一些方法大都是封装好的,就java而言,里面使用了大量的封装好的方法,一些算法也大都写好了,java还有三个特性,封装.继承.多态.当然这里不是讲Java,这里主要是说内部结构,大家都知道数据结构有些东西是分为逻辑结构和物理结构的,物理结构有分为顺序结构和链式结构,有不懂得可以百度百科,这里主要是分享线性表的顺序结构.那么什么是线性表呢,线性表是最基本.最简单.也是最常用的一种数据结

线性表---顺序表

线性结构的特点是:在非空的有限集合中,只有唯一的第一个元素和唯一的最后一个元素.第一个元素没有直接前驱元素,最后一个没有直接的后继元素.其它元素都有唯一的前驱元素和唯一的后继元素. 线性表是一种最简单的线性结构.线性表可以用顺序存储结构和链式存储结构存储,可以在线性表的任意位置进行插入和输出操作. 要想将线性表在计算机上实现,必须把其逻辑结构转化为计算机可识别的存储结构.线性表的存储结构主要有两种:顺序存储结构和链式存储结构. 线性表的顺序表示与实现 线性表的顺序存储结构 线性表的顺序存储结构指

线性表—顺序表

引言(重点): 1.线性表的概述 2.线性表的抽象数据类型描述 3.线性表的实现方式 4.线性表的具体实现 5.每种具体实现的分析 1.什么是线性表?线性表(Linear List):由同类型元素构成有序序列的线性结构. 特征:1.表中元素个数称为线性表的长度2.线性表没有元素时,称为空表3.表起始位置称表头,表结束位置称为表尾4.在一个元素的前面的元素叫前驱元素,在一个元素后面的元素叫后继元素. 2.线性表的抽象数据类型描述 List MakeEmpty():初始化一个空线性表L;Elemen