1. 程式人生 > >java面試基礎(三)常見資料結構及實現

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