最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java棧的三種實現(xiàn)方式(完整版)

 更新時間:2020年12月04日 18:12:26   作者:熊三@  
這篇文章主要介紹了Java棧的三種實現(xiàn)方式(完整版),需要的朋友可以參考下

java什么是棧

系統(tǒng)中的堆、棧和數(shù)據(jù)結構堆、棧不是一個概念??梢哉f系統(tǒng)中的堆、棧是真實的內存物理區(qū),數(shù)據(jù)結構中的堆、棧是抽象的數(shù)據(jù)存儲結構。

棧:實際上就是滿足后進先出的性質,是一種數(shù)據(jù)項按序排列的數(shù)據(jù)結構,只能在一端(稱為棧頂(top))對數(shù)據(jù)項進行插入和刪除。

棧區(qū)(stack)— 由編譯器自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結構中的棧。

棧的優(yōu)勢是,存取速度比堆要快,僅次于直接位于CPU中的寄存器。但缺點是,存在棧中的數(shù)據(jù)大小與生存期必須是確定的,缺乏靈活性。

代碼:

Stack的基本使用
初始化
Stack stack=new Stack
判斷是否為空
stack.empty()
取棧頂值(不出棧)
stack.peek()
進棧
stack.push(Object);
出棧
stack.pop();
實例:
public class Test01 {
 public static void main(String[] args) {
 Stack stack=new Stack();
 //1.empty()棧是否為空
 System.out.println(stack.empty());
 //2.peek()棧頂值  3.進棧push()
 stack.push(new Integer(1));
 stack.push("b");
 System.out.println(stack.peek());
 //4.pop()出棧
 stack.pop();
 System.out.println(stack.peek());
 }
}

棧的主要操作

  1. void push(int data):將data(數(shù)據(jù))插入棧
  2. int pop():刪除并返回最后一個插入棧的

棧的輔助操作

  1. int top():返回最后一個插入棧的元素,但不刪除
  2. int size():返回存儲在棧中的元素的個數(shù)
  3. int isEmpty():判斷棧中是否有元素
  4. int isStackFull():判斷棧中是否滿元素

實現(xiàn)

棧抽象數(shù)據(jù)類型有多種實現(xiàn)方式。下面是常用的方法:

  1. 基于簡單數(shù)組的實現(xiàn)方法
  2. 基于動態(tài)數(shù)組的實現(xiàn)方法
  3. 基于鏈表的實現(xiàn)方法

1)基于簡單數(shù)組實現(xiàn):

public class Stack{
  private int size;//棧的大小
  private int top;//棧頂元素的下標
  private char[] stackArray;//棧的容器
  public Stack(int size){
  	stackArray = new char[size];
  	top = -1;     //初始化棧的時候由于棧內沒有元素,棧頂下標設為-1  
  	this.size = size;
  }
  //入棧,棧頂?shù)南聵?1
  public void push(char item){
  	stackArray[++top] = item;
  }
  //出棧,刪除棧頂元素,棧頂元素的下標-1
  public int pop(){
  	return stackArray[top--];
  }
  //查看棧頂元素,不刪除
  public char find(){
  	return stackArray[top];
  }
  //判空
  public boolean isEmpty(){
  	return (top == -1);
  }
  //判滿
  public boolean isFull(){
  	return (top == size - 1);
  }
  public static void main(String[] args){
  	Stack stack = new Stack(5);
  	stack.push('a');
  	stack.push('b');
  	stack.push('c');
  	stack.push('d');
  	char ch = stack.find();
  	System.out.println(ch);
  }
}

運行結果:

d

2)基于動態(tài)數(shù)組實現(xiàn):

擴容——給我的感覺就像是在搬家,搬完了東西,還得把鑰匙給主人

public class Stack {
	public int size;//棧的大小
  public int top;//棧頂元素的下標
  public static char[] stackArray;//棧的容器
  public Stack(int size){
  	stackArray = new char[size];
  	top = -1;     //初始化棧的時候由于棧內沒有元素,棧頂下標設為-1     
  	this.size = size;
  }
  //入棧,棧頂?shù)南聵?1
  public void push(char item){
  		if(isFull()){
  			doubleStack();
  		}
  		stackArray[++top] = item;
  }
  //模擬數(shù)組的擴容
  public void doubleStack(){
  	char[] newStackArray = new char[size*2];
  	for(int i = 0;i<size;i++){
  		newStackArray[i] = stackArray[i];
  	}
  	size = size*2;
  	stackArray = newStackArray;
  }
  //出棧,刪除棧頂元素,棧頂元素的下標-1
  public int pop(){
  	if(isEmpty()){
  		System.out.println("Stack is Empty");
  		return 0;
  	}else{ 		
  		return stackArray[top--];
  	}
  }
  //查看棧頂元素,不刪除
  public char find(){
  	return stackArray[top];
  }
  //判空
  public boolean isEmpty(){
  	return (top == -1);
  }
  //判滿
  public boolean isFull(){
  	return (top == size - 1);
  }
  public static void main(String[] args){
  	Stack stack = new Stack(5);
  	stack.push('a');
  	stack.push('b');
  	stack.push('c');
  	stack.push('d');
  	stack.push('e');
  	stack.push('f');
  	stack.push('g');
  	stack.push('h');//一共8個元素
  	char ch = stack.find();
  	System.out.println(ch);
  	System.out.println(stackArray.length);
  }
}

運行結果:

h
10

3)基于鏈表實現(xiàn)

使用鏈表實現(xiàn)棧,通過在鏈表的表頭插入元素的方式實現(xiàn)push操作,刪除鏈表的表頭結點實現(xiàn)pop操作。表頭結點即棧頂結點

import java.util.EmptyStackException;
class Link{
	public char data;
	public Link next;
	public void show(){
		System.out.println(data + " ");
	}
	public Link(char data){
		this.data = data;
	}
}
public class Stack2 {
	Link head;
  public int size;//棧的大小
  public int top;//棧頂元素的下標
  public static char[] stackArray;//棧的容器
  public void push(char data){
  	if(head == null){
  		head = new Link(data);
  	}else{
  		Link node = new Link(data);
  		node.next = head;
  		head = node;
  	}
  }
  public void pop(){
  	if(head == null){
  		throw new EmptyStackException();
  	}else{
  		char dat = head.data;
  		head.show();
  		head = head.next;
  	}
  }
  public int top(){
  	if(head == null){
  		return 0;
  	}else{
  		return head.data;
  	}
  }
  public boolean isEmpty(){
  	if(head == null) return true;
  	return false;
  }
  public static void main(String[] args){
  	Stack2 stack = new Stack2();
  	stack.push('A');
  	stack.push('B');
  	stack.push('C');
  	stack.push('D');
  	stack.push('E');
  	stack.push('F');
  	stack.pop();
  }
}

運行結果:

F

到此這篇關于Java棧的三種實現(xiàn)方式(完整版)的文章就介紹到這了,更多相關Java棧內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java棧之鏈式棧存儲結構的實現(xiàn)代碼

    Java棧之鏈式棧存儲結構的實現(xiàn)代碼

    這篇文章主要介紹了Java棧之鏈式棧存儲結構的實現(xiàn)代碼的相關資料,需要的朋友可以參考下
    2017-04-04
  • Java中加鎖的方式代碼示例

    Java中加鎖的方式代碼示例

    這篇文章主要給大家介紹了關于Java中加鎖方式的相關資料,我們平時開發(fā)的過程中難免遇到多線程操作共享資源的時候,這時候一般可以通過加鎖的方式保證操作的安全性,需要的朋友可以參考下
    2023-09-09
  • 詳解slf4j+logback在java工程中的配置

    詳解slf4j+logback在java工程中的配置

    這篇文章主要介紹了slf4j+logback在java工程中的配置,對日志組件logback也進行了簡單介紹,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-08-08
  • spring boot 實現(xiàn)阿里云視頻點播功能(刪除視頻)

    spring boot 實現(xiàn)阿里云視頻點播功能(刪除視頻)

    這篇文章主要介紹了spring boot 實現(xiàn)阿里云視頻點播(刪除視頻功能),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • IDEA新建javaWeb以及Servlet簡單實現(xiàn)小結

    IDEA新建javaWeb以及Servlet簡單實現(xiàn)小結

    這篇文章主要介紹了IDEA新建javaWeb以及Servlet簡單實現(xiàn)小結,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • jdk21環(huán)境配置詳細步驟記錄

    jdk21環(huán)境配置詳細步驟記錄

    JDK是整個Java開發(fā)的核心,它包含了Java的運行環(huán)境和Java工具,這篇文章主要給大家介紹了關于jdk21環(huán)境配置的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • spring 注解如何開啟聲明式事務

    spring 注解如何開啟聲明式事務

    這篇文章主要介紹了spring 注解開啟聲明式事務問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java 數(shù)據(jù)結構之刪除鏈表中重復的結點

    Java 數(shù)據(jù)結構之刪除鏈表中重復的結點

    在一個排序的鏈表中,會存在重復的結點,如何實現(xiàn)刪除該鏈表中重復的結點,重復的結點不保留,并返回鏈表頭指針呢?接下來小編將帶你詳細介紹
    2021-12-12
  • Spring Boot Admin管理監(jiān)控數(shù)據(jù)的方法

    Spring Boot Admin管理監(jiān)控數(shù)據(jù)的方法

    本篇文章主要介紹了Spring Boot Admin管理監(jiān)控數(shù)據(jù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 詳解SpringBoot和SpringBatch 使用

    詳解SpringBoot和SpringBatch 使用

    Spring Batch 是一個輕量級的、完善的批處理框架,旨在幫助企業(yè)建立健壯、高效的批處理應用。這篇文章主要介紹了詳解SpringBoot和SpringBatch 使用,需要的朋友可以參考下
    2018-07-07

最新評論

石门县| 英德市| 万州区| 无棣县| 色达县| 开江县| 泰顺县| 贡嘎县| 修文县| 康保县| 若羌县| 洛川县| 景洪市| 阿坝县| 霍邱县| 时尚| 喀喇| 商水县| 高要市| 溧阳市| 兖州市| 海林市| 光山县| 沈丘县| 板桥市| 凤阳县| 天柱县| 洛扎县| 奎屯市| 西青区| 天长市| 山丹县| 湟源县| 石河子市| 金平| 上虞市| 招远市| 鹰潭市| 渑池县| 金坛市| 宜宾县|