最近各種筆試、面試**,歸結起來,打鐵還需自身硬,想攬瓷器活,就得有金剛鑽。任何各種投機取巧、僥倖心理都是沒意義的。出來混,欠的總是要還的!在學習上,必須死磕到底。
實現陣列擴容、插入、刪除、輸出的功能。
public class myarray
/*** 陣列插入元素
* @param element 插入的元素
* @param index 插入的位置
* @throws exception
*/public void insert(int element,int index) throws exception
//if(size >= array.length)
//從右向左迴圈,將元素逐個向右挪1位
for(int i=size-1;i>=index;i--)
//騰出的位置放入新元素
array[index] = element;
size++; }
/*** 陣列刪除元素
* @param index 刪除元素的位置
* @return
*/public int delete(int index) throws exception
//將要刪除的元素快取,在下一步返回
int deleteelement = array[index];
//從左向右迴圈,將元素逐個向左挪1位
for(int i=index;i實現:
主要思想是將資料用node包裝,然後node這種形式更加健壯和全面,不僅包含有data資料,還有指向下乙個資料的指標,乙個接乙個,最後構成鍊錶這種資料結構,實現鍊錶這種功能。
每次新增的雖然是資料,乙個int資料,但如果僅僅新增int資料的話,肯定是不行的,無法實現鍊錶的特性。所以,每新增乙個資料,都必須new乙個新節點,通過節點物件的data變數儲存資料,然後指向下乙個node的指標next來確定node的邏輯關係。
個人的理解是:鍊錶是一種設計和思想,但最終的實現是根據不同語言的特性來實現的,大同小異。
public class mylinkedlist
//要保證以鍊錶的形式進行,雖然主要插入和操作的是資料data,但為了鍊錶這種資料結構的方便性,還要套一層node的殼,所以所有的資料都是以node的形式儲存
//當插入資料的時候,必須先建立新的物件,將資料放到物件中去。
node insertednode = new node(data);
if(size == 0) else if(index == 0) else if(index == size) else
size++; }
/*** 鍊錶刪除元素
* @param index 刪除的位置
* @return
* @throws exception
*/public node remove(int index) throws exception
//刪除的節點,需要將此節點返回,先將其初始化為null,確定最後要刪除那個節點,將此節點賦值給removenode,作為函式的返回值
node removenode = null;
if(index == 0) else if(index == size) else
size--;
return removenode;
}/**
* 鍊錶查詢元素
* @param index 查詢的位置
* @return
* @throws exception
*/private node get(int index) throws exception
node temp = head;
for(int i=0;i大多數資料結構都是以陣列或鍊錶作為儲存方式。陣列和鍊錶可以被看作資料儲存的「物理結構」。
線性結構
非線性結構
邏輯結構
順序表、棧、佇列
樹、圖物理結構
陣列鍊錶
兩者都屬於邏輯結構,它們的物理實現既可以利用陣列,也可以利用鍊錶來完成。
public class myqueue
/*** 入隊
* @param element 入隊的元素
* @throws exception
*/public void enqueue(int element) throws exception
array[rear] = element;
rear = (rear+1)%array.length; }
/*** 出隊
* @return
* @throws exception
*/public int dequeue() throws exception
int dequeueelement = array[front];
front = (front+1)%array.length;
return dequeueelement; }
/*** 輸出佇列
*/public void output() }
public static void main(string args) throws exception
}
但是由於陣列的長度是有限的,當插入的entry越來來越多時,不同的key通過雜湊函式獲得的下標都可能是相同的。這種情況,叫作雜湊衝突。解決雜湊衝突的方法主要有兩種:
開放定址法:threadlocal採用
鍊錶法:hashmap應用
對於jdk中雜湊表實現類hashmap來說,影響其擴容的因素有兩個。
雜湊表的擴容經過兩個步驟:
擴容,建立乙個新的entry空陣列,長度是原陣列的2倍。
重新hash,遍歷原entry陣列,把所有的entry重新hash到新陣列中。
資料結構 佇列的實現 陣列 鍊錶
一種先進先出的資料結構 基本操作 實現 以陣列實現 public class arrayqueue public arrayqueue int size 入隊 public boolean inqueue int num this head 1 重置隊頭 this tail this count 1...
資料結構 佇列,陣列實現 鍊錶實現和迴圈佇列
一 什麼是佇列 一種先進先出的資料結構 fifo結構 新元素新增在隊尾 push 刪除操作刪掉第乙個元素 pop 二 佇列的實現方式 佇列的實現方式陣列實現 鍊錶實現 三 常見的佇列 常用佇列迴圈佇列 阻塞佇列 併發佇列 四 怎麼實現乙個無bug的佇列思考 思考1 head 頭元素 和tail 尾元...
鍊錶實現佇列 資料結構作業
仿照作業code1的功能,將課本上鍊表的實現佇列能完整實現 需要通過main函式呼叫並能進行友好的人機互動輸入 作業code1 鍊錶實現佇列的 include define ok 1 define error 0 using namespace std typedef int qelemtype t...