資料結構與演算法(五)

2021-07-31 08:34:20 字數 3037 閱讀 4306

雙端鍊錶和雙向鍊錶

一. 雙端鍊錶

1. 什麼是雙端鍊錶

鍊錶中儲存著對最後乙個鏈結點的引用的鍊錶

2. 從頭部進行插入

要對鍊錶進行判斷,如果為空則設定尾結點為新新增的結點。

3. 從尾部進行插入

如果鍊錶為空,則直接設定頭結點為新新增的結點,否則設定尾結點的後乙個結點為新新增的結點。

4. 從頭部進行刪除

判斷頭結點是否有下乙個結點,如果沒有則設定尾結點為null

鏈結點

/*

* 鏈結點,相當於是車廂

*/public class node

/** 顯示方法

*/public void display()

}

雙端鍊錶

/*

* 雙端鍊錶

*/public class firstlastlinklist

/* * 插入乙個結點,在頭結點後進行插入

*/public void insertfirst(long value)

node.next=first;

first=node;

}/* * 插入乙個結點,從尾結點進行插入

*/public void insertlast(long value)else

last=node;

} /*

* 刪除乙個結點,在頭結點後進行刪除

*/public node deletefirst()

first=tmp.next;

return tmp;

} /*

* 顯示方法

*/public void display()

system.out.println();

} /*

* 查詢方法

*/public node find(long value)

current=current.next;

} return current;

} /*

* 刪除方法,根據資料域進行刪除

*/public node delete(long value)

previous=current;

current=current.next;

} if(current==first)else

return current;

}/* * 判斷是否為空

*/public boolean isempty()

}

測試:

public class testfirstlastlinklist 

}

二. 雙向鍊錶

1. 什麼是雙向鍊錶

每個結點除了儲存了對下乙個結點的引用,同時還儲存著對前乙個結點的引用。

2. 從頭部進行插入

要對鍊錶進行判斷,如果為空則設定尾結點為新新增的結點。如果不為空,還需要設定頭結點的前乙個結點為新新增的結點。

3. 從尾部進行插入

如果鍊錶為空,則直接設定頭結點為新新增的結點,否則設定尾結點的後乙個結點為新新增的結點。同時設定新新增的結點的前乙個結點為尾結點。

4. 從頭部進行刪除

判斷頭結點是否有下乙個結點,如果沒有則設定尾結點為null。否則設定頭結點的下乙個結點的previous為null。

5. 從尾部進行刪除

如果頭結點沒有其他結點,則設定尾結點為null。否則設定尾結點前乙個結點的next為null。設定尾結點為其前乙個結點。

6. 刪除方法

不需要再使用乙個零時的指標域。

鏈結點

/*

* 鏈結點,相當於是車廂

*/public class node

/** 顯示方法

*/public void display()

}

雙向鍊錶

/*

* 雙向鍊錶

*/public class doublelinklist

/* * 插入乙個結點,在頭結點後進行插入

*/public void insertfirst(long value)else

node.next=first;

first=node;

}/* * 插入乙個結點,從尾結點進行插入

*/public void insertlast(long value)else

last=node;

} /*

* 刪除乙個結點,在頭結點後進行刪除

*/public node deletefirst()else

first=tmp.next;

return tmp;

} /*

* 刪除結點,從尾部進行刪除

*/public node deletelast()else

last=tmp.previous;

return tmp;

} /*

* 顯示方法

*/public void display()

system.out.println();

} /*

* 查詢方法

*/public node find(long value)

current=current.next;

} return current;

} /*

* 刪除方法,根據資料域進行刪除

*/public node delete(long value)

current=current.next;

} if(current==first)else

return current;

}/* * 判斷是否為空

*/public boolean isempty()

}

測試:

public class testdoublelinklist 

}}

資料結構與演算法(五)

三根針xyz,x上64個圓盤 設計思路 if n 1時,x z else 執行n 1的操作,直到n 1 1 由零個或多個字元組成的有限序列 是用一組位址連續的儲存單元來儲存串中的字串行,按照預定義的大小,為每個定義的字串變數分配乙個固定長度的儲存區,一般用定長陣列來定義 一般用順序儲存 樸素的模式匹...

資料結構與演算法 實驗五

1 編寫函式bfindex string s,int start,string t 實現brute force演算法,其中s為主串,start為子串在主串中的查詢位置,t為子串。程式可參考書本例子。2 設串採用靜態陣列儲存結構,編寫函式實現串的替換replace s,start,t,v 即要求在主串...

演算法與資料結構 五 基本排序演算法

前面幾篇基本上把基本的資料結構都回顧完了,現在開始回顧那些常見的排序演算法。排序是將一組無序的資料根據某種規則重新排列成有序的這麼乙個過程,當時在大學需要我們手工自己實現的主要有三種 選擇排序 插入排序和氣泡排序。因為它比較簡單,所以這裡把他們放到一起作為最基本的排序演算法。插入排序的思路是這樣的 ...