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

Java語言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)棧代碼詳解

 更新時間:2017年11月29日 08:44:48   作者:SilentKnight  
這篇文章主要介紹了Java語言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)棧代碼詳解,簡單介紹了棧的概念,然后分享了線性棧和鏈?zhǔn)綏5腏ava代碼,具有一定參考價值,需要的朋友可以了解下。

近來復(fù)習(xí)數(shù)據(jù)結(jié)構(gòu),自己動手實(shí)現(xiàn)了棧。棧是一種限制插入和刪除只能在一個位置上的表。最基本的操作是進(jìn)棧和出棧,因此,又被叫作“先進(jìn)后出”表。

首先了解下棧的概念:

棧是限定僅在表頭進(jìn)行插入和刪除操作的線性表。有時又叫LIFO(后進(jìn)先出表)。要搞清楚這個概念,首先要明白”?!霸瓉淼囊馑迹绱瞬拍馨盐毡举|(zhì)。

"?!罢?存儲貨物或供旅客住宿的地方,可引申為倉庫、中轉(zhuǎn)站,所以引入到計算機(jī)領(lǐng)域里,就是指數(shù)據(jù)暫時存儲的地方,所以才有進(jìn)棧、出棧的說法。

實(shí)現(xiàn)方式是這樣的:首先定義了一個接口,然后通過這個接口實(shí)現(xiàn)了線性棧和鏈?zhǔn)綏?,代碼比較簡單,如下:

package com.peter.java.dsa.interfaces;
/**
 * 棧操作定義
 * 
 * @author Peter Pan
 */
public interface Stack<T> {
	/* 判空 */
	Boolean isEmpty();
	/* 清空棧 */
	void clear();
	/* 彈棧 */
	T pop();
	/* 入棧 */
	Boolean push(T data);
	/* 棧的長度 */
	int length();
	/* 查看棧頂?shù)脑兀灰瞥?*/
	T peek();
	/* 返回對象在棧中的位置 */
	int search(T data);
}

線性棧:以數(shù)組的方式實(shí)現(xiàn)。

package com.peter.java.dsa.common;
import com.peter.java.dsa.interfaces.Stack;
/**
 * 線性棧
 * 
 * @author Peter Pan
 */
public class LinearStack<T> implements Stack<T> {
	@SuppressWarnings("unchecked")
	 private T[] t = (T[]) new Object[16];
	private int size = 0;
	@Override
	 public Boolean isEmpty() {
		// TODO Auto-generated method stub
		return size == 0;
	}
	@Override
	 public void clear() {
		// TODO Auto-generated method stub
		for (int i = 0; i < t.length; i++) {
			t[i] = null;
		}
		size = 0;
	}
	@Override
	 public T pop() {
		// TODO Auto-generated method stub
		if (size == 0) {
			return null;
		}
		T tmp = t[size - 1];
		t[size - 1] = null;
		size--;
		return tmp;
	}
	@Override
	 public Boolean push(T data) {
		// TODO Auto-generated method stub
		if (size >= t.length) {
			resize();
		}
		t[size++] = data;
		return true;
	}
	@Override
	 public int length() {
		// TODO Auto-generated method stub
		return size;
	}
	@Override
	 public T peek() {
		// TODO Auto-generated method stub
		if (size == 0) {
			return null;
		} else {
			return t[size - 1];
		}
	}
	/* return index of data, return -1 if no data */
	@Override
	 public int search(T data) {
		// TODO Auto-generated method stub
		int index = -1;
		for (int i = 0; i < t.length; i++) {
			if (t[i].equals(data)) {
				index = i;
				break;
			}
		}
		return index;
	}
	@SuppressWarnings("unchecked")
	 private void resize() {
		T[] tmp = (T[]) new Object[t.length * 2];
		for (int i = 0; i < t.length; i++) {
			tmp[i] = t[i];
			t[i] = null;
		}
		t = tmp;
		tmp = null;
	}
	/* from the left to the right is from the top to the bottom of the stack */
	@Override
	 public String toString() {
		// TODO Auto-generated method stub
		StringBuffer buffer = new StringBuffer();
		buffer.append("Linear Stack Content:[");
		for (int i = t.length - 1; i > -1; i--) {
			buffer.append(t[i].toString() + ",");
		}
		buffer.append("]");
		buffer.replace(buffer.lastIndexOf(","), buffer.lastIndexOf(",") + 1, "");
		return buffer.toString();
	}
}

鏈?zhǔn)綏#和ㄟ^單鏈表進(jìn)行實(shí)現(xiàn)。

package com.peter.java.dsa.common;
import com.peter.java.dsa.interfaces.Stack;
public class LinkedStack<T> implements Stack<T> {
	private Node top;
	private int size;
	@Override
	 public Boolean isEmpty() {
		// TODO Auto-generated method stub
		return size == 0;
	}
	@Override
	 public void clear() {
		// TODO Auto-generated method stub
		top = null;
		size = 0;
	}
	@Override
	 public T pop() {
		// TODO Auto-generated method stub
		T topValue = null;
		if (top != null) {
			topValue = top.data;
			Node oldTop = top;
			top = top.prev;
			oldTop.prev = null;
			size--;
		}
		return topValue;
	}
	@Override
	 public Boolean push(T data) {
		// TODO Auto-generated method stub
		Node oldTop = top;
		top = new Node(data);
		top.prev = oldTop;
		size++;
		return true;
	}
	@Override
	 public int length() {
		// TODO Auto-generated method stub
		return size;
	}
	@Override
	 public T peek() {
		// TODO Auto-generated method stub
		T topValue = null;
		if (top != null) {
			topValue = top.data;
		}
		return topValue;
	}
	@Override
	 public int search(T data) {
		// TODO Auto-generated method stub
		int index = -1;
		Node tmp = top;
		for (int i = size - 1; i > -1; i--) {
			if (tmp.data.equals(data)) {
				index = i;
				break;
			} else {
				tmp = tmp.prev;
			}
		}
		tmp = null;
		return index;
	}
	@Override
	 public String toString() {
		// TODO Auto-generated method stub
		StringBuffer buffer = new StringBuffer();
		buffer.append("Linked Stack Content:[");
		Node tmp = top;
		for (int i = 0; i < size - 1; i++) {
			buffer.append(tmp.toString() + ",");
			tmp = tmp.prev;
		}
		tmp = null;
		buffer.append("]");
		buffer.replace(buffer.lastIndexOf(","), buffer.lastIndexOf(",") + 1, "");
		return super.toString();
	}
	private class Node {
		T data;
		Node prev;
		public Node(T data) {
			// TODO Auto-generated constructor stub
			this.data = data;
		}
	}
}

學(xué)習(xí)還在進(jìn)行中,以后會繼續(xù)更新代碼。

就是本文關(guān)于Java語言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)棧代碼詳解的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • 淺談基于SpringBoot實(shí)現(xiàn)一個簡單的權(quán)限控制注解

    淺談基于SpringBoot實(shí)現(xiàn)一個簡單的權(quán)限控制注解

    這篇文章主要介紹了基于SpringBoot實(shí)現(xiàn)一個簡單的權(quán)限控制注解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • windows下java環(huán)境變量的設(shè)置方法

    windows下java環(huán)境變量的設(shè)置方法

    在“系統(tǒng)變量”中,設(shè)置3項屬性,JAVA_HOME,PATH,CLASSPATH(大小寫無所謂),若已存在則點(diǎn)擊“編輯”,不存在則點(diǎn)擊“新建”
    2013-09-09
  • 一文掌握Xposed和LSPosed框架

    一文掌握Xposed和LSPosed框架

    Xposed和LSPosed都是用于Android系統(tǒng)的模塊化框架,允許用戶通過加載模塊來修改應(yīng)用程序或系統(tǒng)行為,LSPosed是基于Xposed的現(xiàn)代化實(shí)現(xiàn),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • Springboot整合支付寶支付功能

    Springboot整合支付寶支付功能

    這篇文章主要介紹了Springboot整合支付寶支付功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • Java垃圾回收之標(biāo)記清除算法詳解

    Java垃圾回收之標(biāo)記清除算法詳解

    今天小編就為大家分享一篇關(guān)于Java垃圾回收之標(biāo)記清除算法詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • java9學(xué)習(xí)系列之安裝與jshell使用

    java9學(xué)習(xí)系列之安裝與jshell使用

    2017年9月21日,千呼萬喚始出來,Java9終于發(fā)布了。作為自己天天接觸的“對象”,還是應(yīng)該多花點(diǎn)心思去了解她。后續(xù)再進(jìn)一步了解詳細(xì)特性。下面這篇文章主要給大家介紹了關(guān)于java9學(xué)習(xí)系列之安裝與jshell使用的相關(guān)資料,需要的朋友可以參考下。
    2017-09-09
  • SpringBoot集成WebSocket長連接實(shí)際應(yīng)用詳解

    SpringBoot集成WebSocket長連接實(shí)際應(yīng)用詳解

    這篇文章主要介紹了SpringBoot集成WebSocket長連接實(shí)際應(yīng)用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 數(shù)據(jù)庫阿里連接池 druid配置詳解

    數(shù)據(jù)庫阿里連接池 druid配置詳解

    本篇文章主要介紹了數(shù)據(jù)庫阿里連接池 druid配置詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • SpringAOP中的切點(diǎn)表達(dá)式Pointcut詳解

    SpringAOP中的切點(diǎn)表達(dá)式Pointcut詳解

    這篇文章主要介紹了SpringAOP中的切點(diǎn)表達(dá)式Pointcut詳解,Spring?的?AOP?中的一個核心概念是切點(diǎn)(Pointcut),切點(diǎn)表達(dá)式定義通知(Advice)執(zhí)行的范圍,需要的朋友可以參考下
    2023-08-08
  • java 使用BigDecimal進(jìn)行貨幣金額計算的操作

    java 使用BigDecimal進(jìn)行貨幣金額計算的操作

    這篇文章主要介紹了java 使用BigDecimal進(jìn)行貨幣金額計算的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論

宿松县| 长葛市| 屏山县| 龙川县| 西城区| 青海省| 陇西县| 丹东市| 开化县| 鸡西市| 义马市| 伊春市| 乌拉特中旗| 乳源| 黔西| 比如县| 澎湖县| 高雄市| 温泉县| 和静县| 广河县| 南岸区| 四川省| 安国市| 桑日县| 美姑县| 灵丘县| 阳城县| 南充市| 六安市| 任丘市| 义马市| 嘉义县| 安远县| 凤城市| 衡阳市| 溧水县| 定边县| 新化县| 平谷区| 灵璧县|