国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Java 數(shù)據(jù)結(jié)構(gòu)線性表之順序存儲(chǔ)詳解原理

Java 數(shù)據(jù)結(jié)構(gòu)線性表之順序存儲(chǔ)詳解原理

2022-02-28 00:36pier~呀 Java教程

線性表的順序存儲(chǔ)是指用一組地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)線性表中的各個(gè)元素、使得線性表中在邏輯結(jié)構(gòu)上相鄰的數(shù)據(jù)元素存儲(chǔ)在相鄰的物理存儲(chǔ)單元中,即通過(guò)數(shù)據(jù)元素物理存儲(chǔ)的相鄰關(guān)系來(lái)反映數(shù)據(jù)元素之間邏輯上的相鄰關(guān)

線性表的定義

線性表的邏輯特征:

  • ①有且僅有一個(gè)稱為開(kāi)始元素的a1,她沒(méi)有前趨,僅有一個(gè)后繼結(jié)點(diǎn)a2;
  • ②有且僅有一個(gè)稱為終端元素的an,他沒(méi)有后繼,只有一個(gè)直接前驅(qū)a(n-1);
  • ③其余元素ai(2≤i≤n-1)稱為內(nèi)部元素,他們都有且僅有一個(gè)直接前驅(qū)a(i-1)和直接后繼a(i+1)。

Java 數(shù)據(jù)結(jié)構(gòu)線性表之順序存儲(chǔ)詳解原理

線性表的圖像表示

線性表的基本運(yùn)算

  • 線性表初始化
  • 求表長(zhǎng)
  • 按索引值查找元素
  • 按值查找
  • 插入元素
  • 刪除

線性表的存儲(chǔ)之順序存儲(chǔ)

線性表順序存儲(chǔ)的定義:線性表的順序存儲(chǔ)指的是將線性表的數(shù)據(jù)元素按其邏輯次序依次存入一組連續(xù)的存儲(chǔ)單元里,用這種方式存儲(chǔ)的線性表稱為順序表。

Java 數(shù)據(jù)結(jié)構(gòu)線性表之順序存儲(chǔ)詳解原理

定義線性表

定義線性表的默認(rèn)空間大小,定義一個(gè)數(shù)組,定義數(shù)組的長(zhǎng)度,初始化一個(gè)size用來(lái)保存里面元素的個(gè)數(shù)。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/** 定義線性表默認(rèn)空間大小 */
private final Integer ListSize=100;
/**定義數(shù)組長(zhǎng)度*/
private Integer Len;
/** 定義線性表保存的數(shù)據(jù)類型
 * 使用泛型*/
private Object[] list;
/**存一個(gè)當(dāng)前元素的個(gè)數(shù)*/
private Integer size=0;
/**定義默認(rèn)線性表*/
public SeqList(){
    Len = ListSize;
    this.list = new Object[Len];
    size++;
}

初始化線性表

把線性表里面的元素全部置空

?
1
2
3
4
5
6
7
/**清空線性表*/
public void clear(){
    for (int i = 0; i < size; i++) {
        list[i]=null;
    }
    size=0;
}

添加元素

這里采用尾插法,即每次默認(rèn)將元素放在最后面

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**添加元素到指定位置*/
public void insert(T element , int index){
    if(index>=Len || index<0){
        throw new IndexOutOfBoundsException("輸入的索引值超過(guò)了線性表的范圍");
    }
    Capacity(size+1);
    //將添加元素的元素往后移一位
    for (int i = size-2; i >= index-1; i--) {
        list[i+1]=list[i];
    }
    list[index-1]=element;
    size++;
}
/**添加元素到末尾*/
public void add(T element){
    insert(element,size);
}

查找元素

這個(gè)模塊分為按索引值查找,和按元素值查找

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**線性表的查找
 * 按索引值查找*/
public T getNode(int index){
    return (T)list[index-1];
}
/**按元素值查找返回索引值*/
public int LocateNode(T t){
    for(int i=0;i<list.length;i++){
        if(list[i].equals(t)){
            return i+1;
        }
    }
    System.out.println("沒(méi)有找到該元素!");
    return -1;
}

刪除元素

刪除元素,又分為刪除指定元素,和刪除最后一個(gè)元素

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**刪除指定位置的元素*/
public T delete(int index){
    if(!OutIndex(index)){
        throw new IndexOutOfBoundsException("刪除位置不在線性表的索引范圍內(nèi)!");
    }
    for (int i = index-1; i < size-1; i++) {
        list[i]=list[i+1];
    }
    /*if(size - index >0){
        System.arraycopy(list,index,list,index-1,size-index);
    }*/
    list[size-1]=null;
    size--;
    return (T) list;
}
/**刪除最后一個(gè)元素*/
public T remove(){
    return delete(size-1);
}

打印線性表

打印線性表,其實(shí)就是重寫一個(gè)toString方法,將線性表打印出來(lái)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**循環(huán)打印線性表*/
    @Override
    public String toString(){
        StringBuilder sb = new StringBuilder();
        if(isEmpty()){
            return "[]";
        }
        else {
            sb.append("[");
            for (int i = 0; i < size-1; i++) {
                int a=0;
                if(list[i]!=null){
                    sb.append(list[ i ]);
                }
                else {
                    break;
                }
                sb.append(",");
            }
            sb.append("]");
            sb.deleteCharAt(sb.indexOf(",]"));
        }
        return sb.toString();
    }

實(shí)現(xiàn)的完整代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
class SeqList<T>{
    /** 定義線性表默認(rèn)空間大小 */
    private final Integer ListSize=100;
    /**定義數(shù)組長(zhǎng)度*/
    private Integer Len;
    /** 定義線性表保存的數(shù)據(jù)類型
     * 使用泛型*/
    private Object[] list;
    /**存一個(gè)當(dāng)前元素的個(gè)數(shù)*/
    private Integer size=0;
    /**定義默認(rèn)線性表*/
    public SeqList(){
        Len = ListSize;
        this.list = new Object[Len];
        size++;
    }
    /**定義自定義長(zhǎng)度的線性表*/
    public SeqList(int length){
        Len = length;
        list = new Object[Len];
        size++;
    }
    /**獲取當(dāng)前線性表的長(zhǎng)度*/
    public int getLen(){
        return Len;
    }
    /**獲取當(dāng)前線性表元素的個(gè)數(shù)*/
    public int getSize(){
        return size;
    }
    /**根據(jù)元素查找在線性表中的位置,未找到返回-1*/
    public int getIndex(T element){
        for (int i = 0; i < size; i++) {
            if(list[i].equals(element)){
                return i;
            }
        }
        return -1;
    }
    /**判斷是否表滿或表空*/
    private boolean OutIndex(int index){
        //return size==Len;//不擴(kuò)容的話,可以這樣寫,但是怕擴(kuò)容
        if(index>size || index<0){
            return false;
        }
        else {
            return true;
        }
    }
    /**根據(jù)索引值返回元素*/
    private T getElement(int index){
        if(!OutIndex(index)){
            throw new IndexOutOfBoundsException("輸入的索引值超過(guò)了線性表的范圍");
            /* System.out.println("輸入索引超過(guò)了線性的范圍");
            return null; */
        }
        return (T)list[index];
    }
    /**擴(kuò)容*/
    private T Capacity(int capacity){
        if(capacity<Len){
            Len = Len+(Len+1)/2;
            if(capacity<Len){
                Capacity(Len);
            }
            else {
                list = Arrays.copyOf(list,Len);
                return (T) list;
            }
        }
        return (T)list;
    }
    /**添加元素到指定位置*/
    public void insert(T element , int index){
        if(index>=Len || index<0){
            throw new IndexOutOfBoundsException("輸入的索引值超過(guò)了線性表的范圍");
        }
        Capacity(size+1);
        //將添加元素的元素往后移一位
        for (int i = size-2; i >= index-1; i--) {
            list[i+1]=list[i];
//            System.out.println("i="+i);
        }
        list[index-1]=element;
        size++;
    }
    /**添加元素到末尾*/
    public void add(T element){
        insert(element,size);
    }
    /**判斷元素表是否為空*/
    public boolean isEmpty(){
        return size==0;
    }
    /**刪除指定位置的元素*/
    public T delete(int index){
        if(!OutIndex(index)){
            throw new IndexOutOfBoundsException("刪除位置不在線性表的索引范圍內(nèi)!");
        }
        for (int i = index-1; i < size-1; i++) {
            list[i]=list[i+1];
        }
        /*if(size - index >0){
            System.arraycopy(list,index,list,index-1,size-index);
        }*/
        list[size-1]=null;
        size--;
        return (T) list;
    }
    /**刪除最后一個(gè)元素*/
    public T remove(){
        return delete(size-1);
    }
    /**清空線性表*/
    public void clear(){
        for (int i = 0; i < size; i++) {
            list[i]=null;
        }
        size=0;
    }
    /**線性表的查找
     * 按索引值查找*/
    public T getNode(int index){
        return (T)list[index-1];
    }
    /**按元素值查找返回索引值*/
    public int LocateNode(T t){
        for(int i=0;i<list.length;i++){
            if(list[i].equals(t)){
                return i+1;
            }
        }
        System.out.println("沒(méi)有找到該元素!");
        return -1;
    }
    /**循環(huán)打印線性表*/
    @Override
    public String toString(){
        StringBuilder sb = new StringBuilder();
        if(isEmpty()){
            return "[]";
        }
        else {
            sb.append("[");
            for (int i = 0; i < size-1; i++) {
                int a=0;
                if(list[i]!=null){
                    sb.append(list[ i ]);
                }
                else {
                    break;
                }
                sb.append(",");
            }
            sb.append("]");
            sb.deleteCharAt(sb.indexOf(",]"));
        }
        return sb.toString();
    }
}

測(cè)試一下

測(cè)試代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void main(String[] args) {
    SeqList<String> seqList = new SeqList<String>();
    //添加一個(gè)元素
    seqList.add("pier");
    seqList.add("真好看");
    seqList.add("90度點(diǎn)頭");
    System.out.println("添加后的線性表為\n\t"+seqList.toString());
    seqList.insert("pipi",1);
    System.out.println("在位置1的地方添加元素后的線性表為\n\t"+seqList.toString());
    seqList.delete(1);
    System.out.println("刪除第二個(gè)元素后的線性表為\n\t"+seqList.toString());
    System.out.println("pier時(shí)第"+seqList.LocateNode("pier")+"個(gè)元素");
    System.out.println("第1個(gè)元素是"+seqList.getNode(1)+"。");
}

運(yùn)行結(jié)果

Java 數(shù)據(jù)結(jié)構(gòu)線性表之順序存儲(chǔ)詳解原理

到此這篇關(guān)于Java 數(shù)據(jù)結(jié)構(gòu)線性表之順序存儲(chǔ)詳解原理的文章就介紹到這了,更多相關(guān)Java 數(shù)據(jù)結(jié)構(gòu) 內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/qq_43325476/article/details/120919973

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文字幕人成乱码在线观看 | 动漫精品一区二区三区 | 狠狠的日| 精品国产精品一区二区夜夜嗨 | 一区免费视频 | 亚洲精品二三区 | 三区在线| 免费看黄色小视频 | 成人a在线视频免费观看 | 日韩在线国产精品 | 黄色毛片在线看 | 二区中文字幕 | 国产传媒视频 | 精品久久久久久久久久久久久久久久久久 | 欧美日韩精品免费 | 国产一区二区三区视频 | 四虎影院最新地址 | 精品视频二区三区 | a级毛片免费在线 | 久久久在线免费观看 | 欧美福利网 | 欧美伊人| 99精品国自产在线 | 国产视频一区在线 | 午夜精品一区二区三区在线视频 | 免费的av网站 | 精品国产乱码久久久久久1区2区 | 亚洲国产精品美女 | 亚洲成人一区二区三区 | 亚洲深深色噜噜狠狠网站 | 国产精品女同一区二区免费站 | 欧美精品1区2区 | 亚洲精品综合 | 色欧美片视频在线观看 | 国产在线三区 | 日韩精品一区二区在线观看 | 一级一片在线播放在线观看 | 久草免费在线 | 精品久久久网站 | 国产在线观看一区二区三区 | 午夜影院在线 |