您好,登錄后才能下訂單哦!
一:通過一些源碼展示各種數據結構的使用方法:
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.鏈表
概念:鏈表是一種物理存儲結構上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的引用鏈 接次序實現的 。
鏈表的種類:
// 1、無頭單向非循環鏈表實現
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();
}
//2、帶頭循環單鏈表實現
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();
}
/ 3、不帶頭雙向鏈表實現
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)的原則。 壓棧:棧的插入操作叫做進棧/壓棧/入棧,入數據在棧頂。
出棧:棧的刪除操作叫做出棧。出數據也在棧頂。
棧的實現一般可以使用數組或者鏈表實現,相對而言數組的結構實現更優一些。因為數組在尾上插入數據的 代價比較小
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)二叉樹的特點:
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…,則稱為 小堆(或大堆)。將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。
堆的性質:
堆中某個節點的值總是不大于或不小于其父節點的值; 堆總是一棵完全二叉樹。
(2)二叉樹的鏈式存儲結構。
// 結點個數
int getSize(Node root);
// 葉子結點個數
int getLeafSize(Node root);
// 第 k 層結點個數
int getKLevelSize(Node root, int k);
// 查找,依次在二叉樹的 根、左子樹、右子樹 中查找 value,如果找到,
返回結點,否則返 null
Node find(Node root, int value);
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。