二 動態陣列的概念及實現

2021-10-01 02:12:11 字數 3376 閱讀 3650

這時我們便可以把陣列的相關屬性和相關行為封裝在類中,類似字串string類

string s = "helloworld";

s.charat(1);

s.compareto("hello");

s.equals("hello");

s.repalce('l','l');

----------------------------------------

將陣列寫到類裡,建立陣列物件

陣列物件.排序()

陣列物件.插入(元素)

陣列物件.查詢(角標)

屬性方面:我們需要儲存陣列的容器,有效元素個數和它的容量

行為方面:我們需要基本的增刪改查和其他的方法來對這個陣列進行操作

動態陣列是順序儲存結構的具體實現

線性表:零個或多個資料元素的有限序列。

所以線性表元素的個數n(n>=0)定義為線性表的長度,當n=0時,稱為空表

不論是通過線性表還是鍊錶實現,它們的方法都是一樣的,我們便可以將它們方法提取出來,用介面定義

package com.day1線性表;

/** * list是線性表的最終父介面

* @param */

public inte***ce list

/*** 建立乙個容量為capacity的乙個線性表

* @param capacity

*/public arraylist(int capacity)

/*** 將乙個陣列封裝成乙個線性表

* @param arr 傳入的陣列

*/public arraylist(e arr)

size = data.length;

}@override

public int getsize()

@override

public boolean isempty()

@override

public void add(int index, e e)

if (size==data.length)

for (int i = size-1; i >= index; i--)

data[index] = e; //此時才能將傳入的元素新增到指定角標

size++; //新增新元素後,有效元素的個數+1

}/**

* 改變data的長度,擴容或縮容

* @param newlen 新陣列的長度

*/private void resize(int newlen)

data = newarr;

}@override

public void addfirst(e e) //利用add(),傳入角標0便是開頭位置

@override

public void addlast(e e) //傳入size將元素新增到最後

@override

public e get(int index)

return data[index]; //角標合法直接返回對應角標的元素就好

}@override

public e getfirst()

@override

public e getlast() //因為角標從0開始,所以需要size-1

@override

public void set(int index, e e)

data[index] = e; //角標合法直接更換對應角標的元素

}@override

public boolean contains(e e)

return false;

}@override

public int find(e e)

for (int i = 0; i < size; i++)

}return -1; //沒找到返回-1

}@override

public e remove(int index)

e e = get(index); //利用get()返回對應角標的元素

for (int i = index+1; i < size; i++)

size--; //此時原index處的元素便被後面的元素替換掉了,這時我們便需要size-1來限制我們只對有效元素進行操作

//判斷是否縮容,最短不能縮過預設容量,有效元素的個數小於等於容量的1/4

if (data.length>default_size&&size<=data.length/4)

return e;

}@override

public e removefirst()

@override

public e removelast()

@override

public void removeelement(e e)

remove(index); //找到後,將角標傳給remove(),刪除

}@override

public void clear() //我們對陣列的操作只在size有效範圍內,所以只需要將size設為0,便可以認為陣列裡沒有元素

public int getcapacity() //容量便是陣列的長度

public void swap(int i,int j)

e temp = data[i]; //直接交換位置

data[i] = data[j];

data[j] = temp;

}public string tostring()else else }}

return sb.tostring();

}public boolean equals(object obj)

if (obj==this)

if (obj instanceof arraylist)

}return true;}}

return false;}}

通訊錄的實現(二)動態實現

動態實現實現通訊錄,就需要使用malloc和realloc等這些函式,首先我們先來介紹一下這些函式。1 void malloc unsigned int size size是需要分配的位元組數。2 void calloc unsigned int num elements,unsigned int ...

陣列的概念及例項

陣列的概念及例項 一 什麼是陣列?應該如何宣告。陣列是記憶體中一片連續的儲存空間。宣告陣列有兩種方式 1 通過字面量的方式宣告陣列 例 var a 10,20,30,40,50,60 宣告乙個陣列,該陣列的名稱為a,該陣列共有6個陣列元素。2 通過陣列的 建構函式 宣告陣列 var b new ar...

(二)動態輪循排程演算法實現

想看上篇的童鞋請移步靜態輪循排程演算法實現 上篇說到,使用取模方式,沒有辦法實現公平輪詢排程,於是有了這篇,採用引用計數的方式實現動態輪詢排程。如下 class roundcounter 動態公平迴圈分配實現演算法 原理 通過整體迴圈計數和成員迴圈計數實現輪循排程 資料結構 許可權人員集合 1,2,...