數據結構(java版)學習筆記(二)——線性表之順序表

順序表的優勢:

  1. 隨機存取元素方便,根據定位公式容易肯定表中每一個元素的存儲位置,因此要指定第i個結點很方便
  2. 簡單,直觀

順序表的缺點:

  1. 插入和刪除結點困難
  2. 擴展不靈活,難以肯定分配的空間
  3. 容易形成浪費

順序表的實現:

這裏我簡單說一下吧,Sqlist類實現了ListIntf接口,也就是咱們上一節中所提到的接口,以後eclipse中就會提示咱們複寫ListIntf中的方法,咱們根據順序表的特色,逐一複寫便可java

詳情看註釋吧~數組

PS:全部的參數i都是序號,從1開始eclipse

import java.util.Scanner;


public class SqList implements ListIntf{
    final int maxlen = 1000; //線性表中可容納最多數據元素數目
    String v[] = new String[maxlen];
    int len =0;//len是長度,1開始,是位序號
    /**
     * 
     * @return 返回線性表中可容納最多數據元素數目
     */
    int getmaxlen(){
        return maxlen;
    }
    public SqList(){
        //構造方法中實現相關的接收數據操做
        Scanner sc = new Scanner(System.in);
        int n;
        String[] a = new String[maxlen];
        System.out.println("請輸入須要的數據個數:");
        n=sc.nextInt();
        sc.close();
        for(int i=0;i<n;i++){
            a[i] = "a"+i;//a[0]的數值是 a0,a[1]的數值是a1,以此類推……
            
        }
        setData(a);
    }
    /**
     * 將String數組a賦值給String數組v
     * @param String數組
     */
    
    public void setData(String[] a){
        v = a;
    }
    @Override
    public int size() {
        return len;
    }

    @Override
    public void clear() {
        v = new String[maxlen];
    }

    @Override
    public boolean isEmpty() {
        return len==0;
    }

    @Override
    public String get(int i) {
        return v[i-1];
    }

    @Override
    public int indexOf(String s) {
        int i;
        for(i=0;i<len;i++){
            if(v[i].equals(s)){
                return i+1;
            }
        }
        System.out.println("順序表中不存在該元素!!");
        return 0;
    }

    @Override
    public String getPre(String s) {
        //當前是順序表,是順序存儲結構,無需實現此方法
        return null;
    }

    @Override
    public String getNext(String s) {
        //當前是順序表,是順序存儲結構,無需實現此方法
        return null;
    }

    @Override
    public void insertElementAt(String s, int i) {
        //首先判斷順序表是否已滿,其次判斷i是否合法,以後再進行插入操做
        if(len==maxlen){
            System.out.println("順序表已滿!");
            return;//結束判斷,跳出判斷語句
        }else{
            if(i<1||i>len){
                System.out.println("輸入的序號不合法!");
                return;
            }else{
                for(int j=len-1;j>=i-1;j--){
                    v[j+1]=v[j];
                }
                v[i-1] =s;  
                len++;
                return;
            }
        }
    }

    @Override
    public String remove(int i) {
String string;
if(i<1||i>len){ System.out.println("輸入序號不合法!"); return null; }else{ string = v[i-1]; for(int j=i-1;j<len;j++){ v[j-1] = v[j]; } len--; return string; } } @Override public String remove(String s) { // TODO Auto-generated method stub String string; for(int i=0;i<len;i++){ if(v[i].equals(s)){ string = v[i]; remove(i+1);//這裏的i是索引(下標),索引(下標)加1成爲序號 return string; } } System.err.println("當前順序表中沒有該元素"); return null; } }
相關文章
相關標籤/搜索