java面試基礎(三)常見資料結構及實現
本文主要講兩種型別的資料結構,一種是線型結構,一種是樹型結構。
一、線型結構
線型結構常見的有:線性表(陣列、連結串列)、佇列、棧
1.1、佇列
package com.my.collection;
/**
* Created by lige on 2018/7/2.
*/
public class Queue {
public int size =0;
public QNode head;
public QNode end;
public Queue(){
}
/**
* 插入到佇列末尾
* @param o
*/
public void add(Object o){
QNode node = new QNode(o);
if(size<=0){
head = node;
end = head;
size++;
return;
}
end.next = node;
end = node;
size++;
}
public void peek(){
if(size <=0 ){
System.out.println("佇列為空,無法出隊!");
return;
}
QNode node = head;
head= head.next;
size --;
}
public static void printQueue(Queue queue){
QNode node = queue.head;
StringBuilder sb = new StringBuilder();
while(node != null ){
sb.append(node.value + "-");
node = node.next;
}
System.out.println(sb);
}
public static void main(String[] args){
Queue queue = new Queue();
queue.add(new Integer(5));
queue.add(new Integer(2));
queue.add(new Integer(3));
queue.add(new Integer(4));
queue.add(new Integer(9));
queue.add(new Integer(8));
printQueue(queue);
queue.peek();
printQueue(queue);
queue.peek();
printQueue(queue);
queue.peek();
printQueue(queue);
queue.peek();
printQueue(queue);
queue.peek();
printQueue(queue);
queue.peek();
printQueue(queue);
queue.peek();
}
}
class QNode{
public QNode next;
public Object value;
public QNode(Object value){
this.value =value;
}
}
先進先出,通過連結串列實現
1.2、棧
package com.my.collection;
/**
* Created by lige on 2018/7/2.
*/
public class Stack {
public int size;
public SNode top;
public SNode down;
public void push(Object o) {
SNode node = new SNode(o);
if (size <= 0) {
top = node;
down = node;
size++;
return;
}
node.next = top;
top = node;
size++;
}
public void pop() {
if (size <= 0) {
System.out.println("棧為空,無法pop!");
return;
}
SNode node = top;
top = top.next;
size--;
}
public void printStack() {
SNode index = top;
StringBuilder b = new StringBuilder();
while (index != null) {
b.append(index.value + "-");
index = index.next;
}
System.out.println(b.append("size:" + size));
}
public static void main(String[] args) {
Stack stack = new Stack();
stack.push(1);
stack.printStack();
stack.push(2);
stack.printStack();
stack.push(3);
stack.printStack();
stack.push(4);
stack.printStack();
stack.push(7);
stack.printStack();
stack.push(8);
stack.printStack();
stack.pop();
stack.printStack();
stack.pop();
stack.printStack();
stack.pop();
stack.printStack();
stack.pop();
stack.printStack();
stack.pop();
stack.printStack();
}
}
class SNode {
public SNode next;
public Object value;
public SNode(Object obj) {
this.value = obj;
}
}
樹
完全二叉樹
package com.my.collection;
import java.util.ArrayList;
import java.util.List;
/**
* Created by lige on 2018/7/2.
*/
public class BTree {
public TreeNode root;
public List<TreeNode> nodes = new ArrayList<TreeNode>();
public void add(Object obj){
TreeNode node =new TreeNode(obj);
if(null == root){
root = node;
nodes.add(node);
return;
}
nodes.add(node);
int index = nodes.size() -1;
int parentIndex = (index-1) /2;
TreeNode parent = nodes.get(parentIndex);
if(index % 2 != 0){
parent.leftChild = node;
}else{
parent.rightChild = node;
}
}
public void preSort(TreeNode root){
if(null != root){
System.out.print(root.value + ",");
preSort(root.leftChild);
preSort(root.rightChild);
}
}
public static void main(String[] args){
BTree tree = new BTree();
tree.add(1);
tree.add(2);
tree.add(3);
tree.add(4);
tree.add(5);
tree.add(6);
tree.preSort(tree.nodes.get(0));
}
}
class TreeNode{
public Object value;
public TreeNode leftChild;
public TreeNode rightChild;
public TreeNode(Object obj){
this.value = obj;
}
}
相關推薦
java面試基礎(三)常見資料結構及實現
本文主要講兩種型別的資料結構,一種是線型結構,一種是樹型結構。 一、線型結構 線型結構常見的有:線性表(陣列、連結串列)、佇列、棧 1.1、佇列 package com.my.col
JAVA語言基礎——(三)跳轉語句、陣列
Java程式語句執行的順序包括4種基本控制結構: (1)順序結構; (2)選擇結構:if語句和switch語句; (3)迴圈結構:for、while、do……while、for each; (4)異常處理邏輯結構。 一、跳轉語句 跳轉語句用於無條件地轉移控制。使用跳轉語句執行分支,該
java語言基礎(三)----面向物件的三大特徵
1.面向物件的三大特徵 (1)封裝:隱藏物件的屬性和實現細節,僅對外提供公共訪問方式。 (2)繼承:它可以使用現有類的所有功能,並在無需重新編寫原來的類的情況下對這些功能進行擴充套件。 通過繼承建立的新類稱為“子類”或“派生類”。
Java語言基礎(三)---陣列
Java語言基礎組成:關鍵字、識別符號、註釋、常量和變數、運算子、語句、函式、陣列 一. 陣列的定義: 同一種類型資料的集合,其實陣列就是一個容器。 運算時很多資料進行運算,先想到的不是運算,而是要把這些資料臨時儲存起來,以便於後期的運算。陣列就是儲存資料的一種方式。
Pandas基礎(三):資料的篩選
匯入pandas庫後,初始一個DataFrame: data = pd.DataFrame(np.arange(16).reshape((4, 4)), index=['Ohio', 'Colorado', 'Utah', 'New York
JNI/NDK開發指南(三)——JNI資料型別及與Java資料型別的對映關係
當我們在呼叫一個Java native方法的時候,方法中的引數是如何傳遞給C/C++本地函式中的呢?Java方法中的引數與C/C++函式中的引數,它們之間是怎麼轉換的呢?我猜你應該
Java面試集合(三)-30道面試題
前言大家好,我是 Vic,今天給大家帶來Java面試集合(三)的概述,希望你們喜歡三1.在Java中是否可以含有多個類?答:可以含有多個類,但只有一個是public類,public類的類名與檔名必須一致
java面試基礎(一)
|| 轉換 har strong oat 裏的 方法 基本類型 操作 1.基本數據類型、封裝類和運算操作(1)簡述 & 和 && ,以及 | 和 || 的區別。———&和|是位運算符,不怎麽用,而&
EFK 配置geo-ip落地實踐(三)經緯度資料查詢及格式化輸出
經過之前的工作,目前已經完成了資料地圖的資料格式化和錄入記錄,目前我們的資料地圖專案已經進行到最後階段,所以現在需要一個介面,進行格式化資料並輸出,其中需要用到Elasticsearch的全文檢索,檢索出資料後,使用php介面格式化資料輸出 一、全文檢索 搜尋條件(時間,空間) 輸出結果(使用者
Lucene基礎(三)-- 中文分詞及高亮顯示
Lucene分詞器及高亮 分詞器 在lucene中我們按照分詞方式把文件進行索引,不同的分詞器索引的效果不太一樣,之前的例子使用的都是標準分詞器,對於英文的效果很好,但是中文分詞效果就不怎麼樣,他會按照漢字的字直接分詞,沒有詞語的概念。 使用分詞的地方
Java語言基礎(四) : 選擇結構之 if 語句
在Java中,選擇結構有:if語句和switch語句。 if語句的語法格式1: if(比較表示式) { 語句體; } 它的執行流程: 1.先計算比較表示式的值,看其返回值是true還是fal
人臉識別之人臉檢測(三)--Haar特徵原理及實現
本文主要由於OpenCV的haartraining程式,對haar特徵的補充及程式碼註釋。 Haar特徵的原理是什麼? Haar特徵分為三類:邊緣特徵、線性特徵、中心特徵和對角線特徵,組合成特徵模板。特徵模板內有白色和黑色兩種矩形,並定義該模板的特徵值為白色矩形畫
java常見面試題目(三)
1、jsp的內建物件。 JSP中一共預先定義了9個這樣的物件,分別為:request、response、session、application、out、pagecontext、config、page、exception 2、session與cookie的作用與區別: cookie資料存放
Java 基礎語法(三) 基本資料型別
Java 的兩大資料型別 內建資料型別 引用資料型別 內建資料型別 Java語言提供了八種基本型別。六種數字型別(四個整數型,兩個浮點型),一種字元型別,還有一種布林型。 byte: byte 資料型別是8位、有符號的,以二進位制補碼錶示的整數; 最
java並發基礎(三)
線程生命周期 over out 處理請求 生命 inter 方式 希望 stat 第6章開始是第二部分,講解結構化並發應用程序,大多數並發應用程序都是圍繞“任務執行”構造的,任務通常是一些抽象的且離散的工作單元。 一、線程池 大多數服務器應用程序都提供了一種自然的任務邊界:
java編程基礎(三)流程控制語句
數據類型 char 格式 條件 -i es2017 else語句 運算 編程 流程控制語句 1.順序語句: 語句:使用分號分隔的代碼成為一條語句。 註意:沒有代碼,只有一個分號也是一條語句。 順序語句就是按照從上到下的順序依次執行的語句 2. if判斷語句 if語句
Java基礎(三)對象與類
get() 外部類 參數 私有方法 靜態方法 屬於 靜態代碼塊 gen bug 1.類的概念:類是構造對象的模板或藍圖。由類構造對象的過程稱為創建類的實例。 2.封裝的概念:封裝(有時稱為數據隱藏)是與對象有關的一個重要概念。對象中的數據稱為實例域,操縱數據的過程稱
JAVA基礎(8)--- 基本資料型別
Java中的資料型別 基本資料型別 整型 JAVA各整型資料都有固定的表示範圍和欄位長度,其不受具體的作業系統的影響,以保證java程式的可移植性。 JAVA的整型常量預設為int型別,在宣告long型資料時,要在資料後面加 “ l ” 或 “ L ” 來標識
java基礎(三)方法呼叫
package com.st.basis.day05; /* * 方法就是函式 * */ public class MethodDemo { public static void main(String[] args) { demo01(10); //同類中靜態方法呼叫
JAVA高階基礎(12)---HashMap的資料結構及內部實現
HashMap HashMap的工作原理 Java 8 的 HashMap 對之前做了較大的優化,其中最重要的一個優化就是桶中的元素不再唯一按照連結串列組合,也可以使用紅黑樹進行儲存,總之,目標只有一個,那就是在安全和功能性完備的情況下讓其速度更快,提升效能。 java8