這時我們便可以把陣列的相關屬性和相關行為封裝在類中,類似字串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,...