zoukankan      html  css  js  c++  java
  • java——线性表接口实现

     线性表是存储顺序牌类的数据时最常用的数据结构

        实现线性表有两种方式。第一种是使用数组存储线性表的元素。数组是动态创建的。超过数组的容量时,创建一个

    新的更大的数组,并且将当前数组中的元素复制到新建的数组中。另一种方法是用链表结构实现。链表由节点组成,每

    个结点都是动态生成的,用来存储一个元素。所有的结点连接成一个线性表。

        对于线性表的主要操作有:

        1、提取线性表的元素

        2、在线性表中插入一个新元素

        3、从线性表中删除一个元素

        4、获取线性表中元素的个数

        5、查找线性表中是否包含某个元素

        6、判断线性表是否为空

    下面这个接口类定义了常用的操作。

     1 package com.ezreal;
     2 
     3 
     4 public interface ListIntf {
     5     /**
     6      * 返回表长度
     7      * @return
     8      */
     9     public int size();
    10     
    11     /**
    12      * 增加元素
    13      * @param obj
    14      */
    15     public void add(Object obj);
    16     /**
    17      * 重置为空表
    18      */
    19     public void clear();
    20     /**
    21      * 判断是否为空
    22      * @return
    23      */
    24     public boolean isEmpty();
    25     /**
    26      * 第i个数据元素的值
    27      * @param i
    28      * @return
    29      */
    30     public Object get(int i);
    31     /**
    32      * 返回第一个这个元素的位置
    33      * @param obj
    34      * @return
    35      */
    36     public int indexOf(Object obj);
    37     /**
    38      * 返回这个元素的前驱
    39      * @param obj
    40      * @return
    41      */
    42     public Object getPre(Object obj);
    43     /**
    44      * 返回这个元素的后继
    45      * @param obj
    46      * @return
    47      */
    48     public Object getNext(Object obj);
    49     /**
    50      * 第i个位置插入新的元素对象
    51      * @param obj
    52      * @param i
    53      */
    54     public void insertElementAt(Object obj ,int i);
    55     /**
    56      * 删除第i个元素
    57      * @param i
    58      * @return
    59      */
    60     public Object remove(int i);
    61     /**
    62      * 删除数据元素obj,并返回这个元素的值
    63      * @param obj
    64      * @return
    65      */
    66     public Object remove(Object obj);
    67 }

    接下来用数组实现线性表。数组的类型是Object类型,所以,数组中每个元素实际元素存储的是对象的。

      1 package com.ezreal;
      2 
      3 public class SqList implements ListIntf {
      4     final int maxlen = 1000;
      5     Object v[] = new Object[maxlen];
      6     int len = 0;
      7 
      8     public SqList() {
      9 
     10     }
     11 
     12     @Override
     13     public void add(Object obj) {
     14         if(len == maxlen){
     15             System.out.println("溢出");
     16         }else{
     17             v[len] = obj;
     18             len++;
     19         }
     20     }
     21 
     22     @Override
     23     public int size() {
     24         return len;
     25     }
     26 
     27     @Override
     28     public void clear() {
     29         
     30         len =0;
     31     }
     32 
     33     @Override
     34     public boolean isEmpty() {
     35         
     36         if(len == 0){
     37             return true;
     38         }
     39         return false;
     40     }
     41 
     42     @Override
     43     public Object get(int i) {
     44         if(i<1 || i>len){
     45             System.out.println("获取元素位置不正确");
     46         }else{
     47             return v[i-1];
     48         }
     49         return null;
     50         
     51     }
     52 
     53     @Override
     54     public int indexOf(Object obj) {
     55         for(int i=0;i<len;i++){
     56             if(v[i].equals(obj)){
     57                 return i;
     58             }
     59         }
     60         return -1;
     61     }
     62 
     63     @Override
     64     public Object getPre(Object obj) {
     65         int i = indexOf(obj);
     66         if(i==-1){
     67             System.out.println("无该元素");
     68         }else if(i == 0){
     69             System.out.println("无前驱");
     70         }else{
     71             return v[i-1];
     72         }
     73         
     74         return null;
     75     }
     76 
     77     @Override
     78     public Object getNext(Object obj) {
     79         int i = indexOf(obj);
     80         if(i==-1){
     81             System.out.println("无该元素");
     82         }else if(i == len){
     83             System.out.println("无前驱");
     84         }else{
     85             return v[i+1];
     86         }
     87         
     88         return null;
     89     }
     90 
     91     @Override
     92     public void insertElementAt(Object obj, int i) {
     93         if(len == maxlen){
     94             System.out.println("溢出");
     95             return;
     96         }else {
     97             if(i < 0 || i >len){
     98                 System.out.println("插入位置不正确");
     99                 return;
    100             }else{
    101                 for(int j=len-1;j>=i-1;j--){
    102                     v[j+1]=v[j];//第i个元素和他后面的所有元素均后移一个位置
    103                 }
    104                 v[i-1]=obj;
    105                 len++;
    106                 return;
    107             }
    108             
    109         }
    110 
    111     }
    112 
    113     @Override
    114     public Object remove(int i) {
    115         Object obj;
    116         if(i<1 || i>len){
    117             System.out.println("删除位置不正确");
    118         }else{
    119             obj = v[i-1];
    120             for(int j=i;j<len;j++){
    121                 v[j-1]=v[j];
    122             }
    123             len--;
    124             return obj;
    125         }
    126         return null;
    127         
    128     }
    129 
    130     @Override
    131     public Object remove(Object obj) {
    132         int i=indexOf(obj);
    133         if(i==-1){
    134             System.out.println("无该元素");
    135         }else {
    136             remove(i+1);
    137         }
    138         
    139         return null;
    140     }
    141 
    142 }

     如有不对的地方,请各位看官指出。


     

  • 相关阅读:
    C++类型前置声明
    Qt 引用头文件 QT_BEGIN_NAMESPACE QT_END_NAMESPACE
    Qt emit的使用
    特定于类的内存管理---《C++必知必会》 条款36
    C++深入理解虚函数
    使用网页预加载顶部进度条
    简单读取 properties文件
    win2012r2 关闭中英文悬浮小方框显示
    bootstrap的Alerts中 可以放置p标签 设置 align="center" 用来设置文本居中
    char和String 在jsp java代码中与jstl代码中的区别
  • 原文地址:https://www.cnblogs.com/ezreal2016/p/5813304.html
Copyright © 2011-2022 走看看