這次的實作stack 堆疊
如同字面上的意思 一堆資料疊在一起
像盤子一樣((好老套的說法
要拿 從最上面的開始拿
要存 會一直往上累積
先進後出
先進的 被壓在下面
後進的 會被先拿走
說穿了 會改變的只有最上面的那個點
存入是存在最上面 取出也是從最上面開始拿
所以
newNode.link = front;
front = newNode;
新的節點的連結就連到原先的串列
再讓front 為新的節點
這樣就能維持一直插入在頂端了
取出也是同樣的道理
front = front.link;
直接讓front往後跳一個點,當然在跳之前要先把他的data先存下來
然後在跳後面一個點,return data
這樣就大功告成了
stack其實是滿簡單的單向鏈結串列呢
至於peep
這個緣由滿好笑的,會寫這個方法是因為在寫單向鏈結串列的四則運算優先問題時
想看stack最上面的資料,卻又不希望他提出來
要開始編寫時想不到方法名稱要叫什麼,就google翻譯了一下
想說 偷偷看一下 就打偷看 竟然跳出 peep
馬上勾起c#的回憶,c#的stack中 也有peep
當初沒想太多,現在回想起來了
原來阿 c#的程式設計人員跟我有一樣的想法呢
偷看一下 peep 滿好玩的
peep 就很簡單 直接return front的data就好了
以下是java程式碼
import java.util.Scanner;
class Main {
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
Stack stack = new Stack();
System.out.print("請輸入指令 1.插入 2.刪除 3.查詢頂端資料 4.查詢長度 : ");
while(input.hasNext())
{
switch(input.nextInt())
{
case 1 :
System.out.print("請輸入要插入的數字 : ");
stack.push(input.nextInt());
System.out.println();
break;
case 2 :
if(stack.isNull())System.out.println("無元素");
else System.out.println("得到 : "+stack.pop());
break;
case 3 :
System.out.println("頂端的資料為 : "+stack.peep());
break;
case 4 :
System.out.println("長度為 : "+stack.count());
break;
}
System.out.print("請輸入指令 1.插入 2.刪除 3.查詢頂端資料 4.查詢長度 : ");
}
}
}
class Node
{
public int data;
public Node link;
Node(int data){this.data = data;}
}
class Stack
{
int count_ = 0;
Node front;
public void push(int data)//插入
{
count_++;
Node newNode = new Node(data);
if(front == null)
{
front = newNode;
return;
}
newNode.link = front;
front = newNode;
print();
}
public int peep()//偷看!?
{
return front.data;
}
public int pop()//刪除
{
count_--;
int data = front.data;
front = front.link;
print();
return data;
}
public boolean isNull()//判斷是否為空
{
return front == null ? true :false;
}
public void print()
{
Node printTemp =front;
while(printTemp != null)
{
System.out.print(printTemp.data);
printTemp = printTemp.link;
if(printTemp != null)System.out.print(" ---> ");
else System.out.println();
}
}
public int count(){return count_;}
}
文章標籤
全站熱搜
