Javaプログラミング

トップページ      |      目次
←前へ      次へ→

    • スタック(stack)
      • スタックとはでtop(先頭)と呼ばれる端点で挿入・削除が行われる順序付きリストとして定義される。 スタックは以下の性質を持つ。
        • 後に格納されたデータが先に取り出され、先に格納されたデータは先に取り出される(この性質をLIFO:Last In First Out,あるいはFILO:First in Last Outという)
        • データの出し入れはそれぞれpopとpushで行う
        • popが行われるとtopの要素が削除される
        • pushが行われるとtop後(上)に要素が追加され新たなtopの要素になる
        • スタックが有限長でデータが一杯(full)の状態のスタックにpushしようとするとスタックオーバーフロー(stack overflow)になる、(通常は例外処理される)
        • データが空(empty)の状態のスタックからpopしようとするとスタックアンダーフロー(stack underflow)になる、(通常は例外処理される)
      • スタックの応用
      • スタックの性質から次のような用途にも利用される。
        • 関数呼び出しの実装(再帰も含む)
        • ウェブブラウザの訪問履歴(戻るボタン)
        • プログラムのアンドゥ・リドゥの実装
        実行結果
      • スタックの実装
      • 
        class Stack{
        	int top;
        	int capacity;
        	int[] array;
        
        	public Stack(int capacity) {
        		this.capacity=capacity;
        		this.top=-1;
        		this.array=new int[this.capacity];
        	}
        
        	public boolean isEmpty() {
        		return this.top==-1?true:false;
        	}
        
        	public boolean isFull() {
        		return this.top==this.capacity-1?true:false;
        	}
        
        	public void push(int data) {
        		if(isFull()){
        			System.out.println("Stack Overflow");
        			return;
        		}else {
        			System.out.println(data+" is Pushed");
        			this.array[++this.top]=data;
        		}
        	}
        
        	public int pop() {
        		if(isEmpty()) {
        			System.out.println("Stack is Empty");
        			return 0;
        		}else {
        			System.out.println(array[top]+" is Poped");
        			return this.array[top--];
        		}
        	}
        
        	public int top() {
        		if(isEmpty()) {
        			System.out.println("Stack is Empty");
        			return 0;
        		}else {
        			System.out.println("top is "+array[top]);
        			return this.array[top];
        		}
        	}
        }
            
            
        サンプルコード


      ←前へ      次へ→