🧩

【Java】スタック

2024/11/23に公開

この記事は、「新・明解Javaで学ぶアルゴリズムとデータ構造」を読んで学んだことを、個人的な備忘録目的でまとめています。

ただし、本を参考にして自分なりに構成やコードを変更しているためご注意ください。
アルゴリズムの詳細や解説は是非参考書をお手に取って読まれてください。

【リンク紹介】
Javaで学ぶアルゴリズムとデータ構造
これまで書いたシリーズ記事一覧

スタック

package chap04;

public class IntStack {
	
	private int[] stk;        // スタック用の配列
	private int   capacity;    // スタックの容量
	private int   ptr;         // スタックポインタ
	

	//--- 実行時例外:スタックが空 ---//
	public class EmptyIntStackException extends RuntimeException {
		
		// 例外発生時の処理は利用例にて記述する
		public EmptyIntStackException() {}
	}
	
	//--- 実行時例外:スタックが満杯 ---//
	public class OverflowIntStackException extends RuntimeException {
		
		// 例外発生時の処理は利用例にて記述する
		public OverflowIntStackException() {}
	}
	
	
	//--- コンストラクタ ---//
	public IntStack(int maxlen) {
		
		// 初期化
		ptr      = 0;
		capacity = maxlen;
		
		// 例外:スタック用の配列の生成失敗
		try {
			stk = new int[capacity];
		} catch (OutOfMemoryError e) {
			capacity = 0;
		}
	}
	
	//--- プッシュ ---//
	public int push(int x) throws OverflowIntStackException {
		
		// スタックが満杯のとき
		if (ptr >= capacity)
			throw new OverflowIntStackException();
		
		return stk[ptr++] = x;
	}
	
	//--- ポンプ ---//
	public int pop() throws EmptyIntStackException {
		
		// スタックが空のとき
		if (ptr <= 0)
			throw new EmptyIntStackException();
		
		return stk[--ptr];
	}
	
	
	//--- ピーク(頂上のデータを覗き見) ---//
	public int peek() throws EmptyIntStackException {
		
		// スタックが空のとき
		if (ptr <= 0)
			throw new EmptyIntStackException();
		
		return stk[ptr - 1];
	}
	
	//--- スタックを空にする ---//
	public void clear() {
		ptr = 0;
	}
	
	//--- スタックに積まれているデータ数を返す ---//
	public int size() {
		return ptr;
	}
	
	//--- スタックは空であるか ---//
	public boolean isEmpty() {
		return ptr <= 0;
	}
	
	//--- スタックは満杯であるか ---//
	public boolean isFull() {
		return ptr >= capacity;
	}
	
	//--- スタック内の全データを底→頂上の順に表示 ---//
	public void dump() {
		
		if (ptr <= 0)
			System.out.println("スタックは空です。");
		else {
			
			for (int i = 0; i < ptr; i++)
				System.out.print(stk[i] + " ");
			
			System.out.println();
		}
	}

}

学習内容まとめ

eclipse操作時に役立つショートカットまとめ
https://qiita.com/toshi0383/items/1d2a990392998789062c

\bf{\textcolor{red}{記事が役に立った方は「いいね」を押していただけると、すごく喜びます \ 笑}}
ご協力のほどよろしくお願いします。

Discussion