Java語言實現資料結構棧代碼詳解,java資料結構

來源:互聯網
上載者:User

Java語言實現資料結構棧代碼詳解,java資料結構

近來複習資料結構,自己動手實現了棧。棧是一種限制插入和刪除只能在一個位置上的表。最基本的操作是進棧和出棧,因此,又被叫作“先進後出”表。

首先瞭解下棧的概念:

棧是限定僅在表頭進行插入和刪除操作的線性表。有時又叫LIFO(後進先出表)。要搞清楚這個概念,首先要明白”棧“原來的意思,如此才能把握本質。

"棧“者,儲存貨物或供旅客住宿的地方,可引申為倉庫、中轉站,所以引入到電腦領域裡,就是指資料暫時儲存的地方,所以才有進棧、出棧的說法。

實現方式是這樣的:首先定義了一個介面,然後通過這個介面實現了線性棧和鏈式棧,代碼比較簡單,如下:

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();/* 查看棧頂的元素,但不移除它 */T peek();/* 返回對象在棧中的位置 */int search(T data);}

線性棧:以數組的方式實現。

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 stubreturn size == 0;}@Override public void clear() {// TODO Auto-generated method stubfor (int i = 0; i < t.length; i++) {t[i] = null;}size = 0;}@Override public T pop() {// TODO Auto-generated method stubif (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 stubif (size >= t.length) {resize();}t[size++] = data;return true;}@Override public int length() {// TODO Auto-generated method stubreturn size;}@Override public T peek() {// TODO Auto-generated method stubif (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 stubint 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 stubStringBuffer 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();}}

鏈式棧:通過單鏈表進行實現。

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 stubreturn size == 0;}@Override public void clear() {// TODO Auto-generated method stubtop = null;size = 0;}@Override public T pop() {// TODO Auto-generated method stubT 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 stubNode oldTop = top;top = new Node(data);top.prev = oldTop;size++;return true;}@Override public int length() {// TODO Auto-generated method stubreturn size;}@Override public T peek() {// TODO Auto-generated method stubT topValue = null;if (top != null) {topValue = top.data;}return topValue;}@Override public int search(T data) {// TODO Auto-generated method stubint 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 stubStringBuffer 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 stubthis.data = data;}}}

學習還在進行中,以後會繼續更新代碼。

就是本文關於Java語言實現資料結構棧代碼詳解的全部內容,希望對大家有所協助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支援!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.