java泛型編程之泛型鏈棧

最近突然打算好好學一下java,因此每天給自己定的看三節java編程思想,並用scdn記錄下來,權當是檢驗自己對於語言的理解程度

鏈棧故名思議是一條頭尾相連的鏈條,就像數據結構裏面的鏈表一樣

struct Node{
int item;
Node * next;
}
這是c裏面的結構體,用指針將整個鏈表串聯起來,java裏面則沒有指針,但是也可以構造一個鏈棧,棧就是先進後出的一種數據結構,要明確棧裏面

是要裝一些數據類型的對象的,多的不說貼代碼先:

package com;

public class test<T>
{
	static private class Node<U>//內部類
	{
		private U u;
		Node<U> next;
		Node()
		{
			u=null;
			next=null;
		}
		Node(U item,Node<U> next)
		{
			this.u=item;
			this.next=next;
		}
		boolean end()//判斷鏈棧中元素是否取完或者爲空
		{
			return u==null&&next==null;
		}
	}
	Node<T> top=new Node<T>();//節點元素
	public void push(T item)//入棧
	{
		top=new Node<T>(item,top);//每次都新建一個Node,然後新的Node裏的成員的Node是先前的Node,也就是將新的Node和舊的Node建立一種聯繫,形成一個鏈棧,類似數據結構裏面的鏈表,最開始的元素相當於頭結點,節點剛開始元素都爲空
	}
	public T pop()//出棧
	{
		T result=top.u;//暫存表頭元素
		if(!top.end())//判斷鏈棧內元素是否爲空
		{
			top=top.next;//讓第二個元素爲此時鏈棧的頭頂元素
		}
		return result;//返回表頭元素
	}
}
首先是一個泛型類test<T>,然後在這個泛型類裏面又有一個內部類Node<U>,這個內部類就包含一個數據類型元素:U u,然後又包含一個自己類型的對象,爲什麼要這樣做呢,就像c語言裏面的鏈表一樣,爲了將整個鏈棧串聯起來,串聯邏輯會在後面的方法裏面得到體現,這個內部類有兩種構造方式,一個爲無參構造,一個爲有兩個元素的有參

構造,有參構造裏面有兩個數據類型對象參數,一個爲需要存儲的元素,一個爲內部類對象元素,

top=new Node<T>(item,top);
這段代碼意思可以理解爲top.next=原來的top,第一個top是新生成的節點,push方法將新節點,新元素推入棧頂,pop方法將鏈棧頭元素取出來,將頭元素裏面包含的

節點對象作爲新的鏈棧頭,之前需要判斷一下鏈棧是否爲空,就是end()方法,最後用main方法測試一下這個鏈表

<pre name="code" class="java">
test<String> temp=new test<String>();//動態建立泛型類型System.out.println(temp.top.u);temp.push("abc");//新元素進棧temp.push("bcd");//第二個元素進棧temp.push("cde");//第三個元素進棧System.out.println(temp.top.u);String str=temp.pop();System.out.println("出棧的表頭元素: "+str);System.out.println("新棧的頭元素: "+temp.top.u);}


執行結果:

<pre name="code" class="java">null
cde
出棧的表頭元素: cde
新棧的頭元素: bcd
null
cde
出棧的表頭元素: cde
新棧的頭元素: bcd


可以看到,最後完美的實現了泛型鏈棧



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章