一:經過一些源碼展現各類數據結構的使用方法:
1.順序表
概念及結構 :
順序表是用一段物理地址連續的存儲單元依次存儲數據元素的線性結構,通常狀況下采用數組存儲。在數組 上完成數據的增刪查改數組
public interface ISequence { //在pos位置插入val boolean add(int pos,Object data); //查找關鍵字key 找到返回key的下標,沒有返回null; int search(Object key); //查找是否包含關鍵字key是否在順序表當中(這個和search有點衝突) boolean contains(Object key); //獲得pos位置的值 Object getPos(int pos); //刪除第一次出現的關鍵字key Object remove(Object key); //獲得順序表的長度 int size(); //打印順序表 void display(); //清空順序表以防內存泄漏 void clear(); }
2.鏈表
概念:鏈表是一種物理存儲結構上非連續、非順序的存儲結構,數據元素的邏輯順序是經過鏈表中的引用鏈 接次序實現的 。數據結構
鏈表的種類:框架
// 一、無頭單向非循環鏈表實現 public interface ILinked { //頭插法 void addFirst(int data); //尾插法 void addLast(int data); //任意位置插入,第一個數據節點爲0號下標 boolean addindex(int index,int data); //查找是否包含關鍵字key是否在單鏈表當中 boolean contains(int key); //刪除第一次出現關鍵字爲key的節點 int remove(int key); //刪除全部值爲key的節點 void removeAllKey(int key); //獲得單鏈表的長度 int getLength(); void display(); void clear(); } //二、帶頭循環單鏈表實現 public interface ICLinked { //頭插法 void addFirst(int data); //尾插法 void addLast(int data); //任意位置插入,第一個數據節點爲0號下標 boolean addindex(int index,int data); //查找是否包含關鍵字key是否在單鏈表當中 boolean contains(int key); //刪除第一次出現關鍵字爲key的節點 int remove(int key); //刪除全部值爲key的節點 void removeAllKey(int key); //獲得單鏈表的長度 int getLength(); void display(); void clear(); } / 三、不帶頭雙向鏈表實現 public interface IDoubleLinked { //頭插法 void addFirst(int data); //尾插法 void addLast(int data); //任意位置插入,第一個數據節點爲0號下標 boolean addindex(int index,int data); //查找是否包含關鍵字key是否在單鏈表當中 boolean contains(int key); //刪除第一次出現關鍵字爲key的節點 int remove(int key); //刪除全部值爲key的節點 void removeAllKey(int key); //獲得單鏈表的長度 int getLength(); void display(); void clear(); }
3.棧
棧的概念及結構
棧:一種特殊的線性表,其只容許在固定的一端進行插入和刪除元素操做。進行數據插入和刪除操做的一端 稱爲棧頂,另外一端稱爲棧底。棧中的數據元素遵照後進先出LIFO(Last In First Out)的原則。 壓棧:棧的插入操做叫作進棧/壓棧/入棧,入數據在棧頂。
出棧:棧的刪除操做叫作出棧。出數據也在棧頂。
棧的實現通常可使用數組或者鏈表實現,相對而言數組的結構實現更優一些。由於數組在尾上插入數據的 代價比較小ide
interface MyStack { // 判斷這個棧是否爲空棧 boolean empty(); // 返回棧頂元素,但不出棧 int peek(); // 返回棧頂元素,而且出棧 int pop(); // 將 item 壓入棧中 void push(int item); // 返回元素個數 int size(); }
4.隊列
隊列的概念及結構
隊列:只容許在一端進行插入數據操做,在另外一端進行刪除數據操做的特殊線性表,隊列具備先進先出 FIFO(First In First Out) 入隊列:進行插入操做的一端稱爲隊尾 出隊列:進行刪除操做的一端稱爲隊頭。
隊列的實現
隊列也能夠數組和鏈表的結構實現,使用鏈表的結構實現更優一些,由於若是使用數組的結構,出隊列在數 組頭上出數據,效率會比較低。指針
interface IMyQueue { // 判斷這個隊列是否爲空 boolean empty(); // 返回隊首元素,但不出隊列 int peek(); // 返回隊首元素,而且出隊列 int poll(); // 將 item 放入隊列中 void add(int item); // 返回元素個數 int size(); }
5:二叉樹
一棵二叉樹是結點的一個有限集合,該集合或者爲空,或者是由一個根節點加上兩棵別稱爲左子樹和右子樹 的二叉樹組成。
1)二叉樹的特色:code
2)特殊的二叉樹: 隊列
3)二叉樹的存儲結構
二叉樹通常可使用兩種結構存儲,一種順序結構,一種鏈式結構
1.二叉樹順序存儲在 物理上是一個數組,在邏輯上是一顆二叉樹。內存
class Node { int value; // 結點中的數據域 Node leftChild; // 保存左孩子結點 Node rightChild; // 保存右孩子結點 }
(1)二叉樹的順序存儲結構:通常是一顆徹底二叉樹。
引入堆的概念:(利用數組的存儲結構,存放一顆徹底二叉樹)
堆的概念及結構
若是有一個關鍵碼的集合K = {k0,k1, k2,…,kn-1},把它的全部元素按徹底二叉樹的順序存儲方式存儲 在一個一維數組中,並知足:Ki <= K2i+1 且 Ki<= K2i+2 (Ki >= K2i+1 且 Ki >= K2i+2) i = 0,1,2…,則稱爲 小堆(或大堆)。將根節點最大的堆叫作最大堆或大根堆,根節點最小的堆叫作最小堆或小根堆。
堆的性質:
堆中某個節點的值老是不大於或不小於其父節點的值; 堆老是一棵徹底二叉樹。rem
(2)二叉樹的鏈式存儲結構。get
// 結點個數 int getSize(Node root); // 葉子結點個數 int getLeafSize(Node root); // 第 k 層結點個數 int getKLevelSize(Node root, int k); // 查找,依次在二叉樹的 根、左子樹、右子樹 中查找 value,若是找到, 返回結點,不然返 null Node find(Node root, int value);