자바 스 택 의 세 가지 실현 방식(전체 버 전)

6326 단어 자바 스 택
자바
시스템 의 더미,창고 와 데이터 구조 더미,창 고 는 하나의 개념 이 아니다.시스템 의 더미,스 택 은 실제 메모리 물리 구역 이 고 데이터 구조 중의 더미,스 택 은 추상 적 인 데이터 저장 구조 라 고 할 수 있다.
스 택:실제 적 으로 후진 선 출 의 특성 을 만족 시 키 고 데이터 항목 이 순서대로 배 열 된 데이터 구조 로 한 끝(스 택 지붕(top)에서 만 데이터 항목 을 삽입 하고 삭제 할 수 있 습 니 다.

창고 구역(stack)-컴 파 일 러 가 자동 으로 분배 하여 방출 하고 함 수 를 저장 하 는 매개 변수 값,국부 변수의 값 등.그 조작 방식 은 데이터 구조의 창고 와 유사 하 다.
스 택 의 장점 은 CPU 에 직접 있 는 레지스터 에 버 금 가 는 액세스 속도 가 쌓 이 는 것 보다 빠르다 는 것 이다.그러나 스 택 에 존재 하 는 데이터 크기 와 생존 기간 은 반드시 확정 되 고 유연성 이 부족 하 다 는 것 이 단점 이다.
코드:

Stack     
   
Stack stack=new Stack
      
stack.empty()
    (   )
stack.peek()
  
stack.push(Object);
  
stack.pop();
  :
public class Test01 {
 public static void main(String[] args) {
 Stack stack=new Stack();
 //1.empty()     
 System.out.println(stack.empty());
 //2.peek()     3.  push()
 stack.push(new Integer(1));
 stack.push("b");
 System.out.println(stack.peek());
 //4.pop()  
 stack.pop();
 System.out.println(stack.peek());
 }
}
창고 의 주요 조작
  • void push(int data):data(데이터)를 스 택 에 삽입
  • int pop():마지막 스 택 삽입
  • 을 삭제 하고 되 돌려 줍 니 다.
    창고 의 보조 조작
  • int top():마지막 스 택 에 삽 입 된 요 소 를 되 돌려 주지 만 삭제 하지 않 습 니 다
  • int size():스 택 에 저 장 된 요소 의 개 수 를 되 돌려 줍 니 다
  • int isEmpty():창고 에 원소 가 있 는 지 판단 하기
  • int isStackFull():창고 에 원소 가 가득 찼 는 지 판단 하기
  • 이루어지다
    스 택 추상 데이터 형식 은 여러 가지 실현 방식 이 있 습 니 다.다음은 자주 사용 하 는 방법 입 니 다.
  • 간단 한 배열 을 바탕 으로 하 는 실현 방법
  • 동적 배열 을 바탕 으로 하 는 실현 방법
  • 링크 를 바탕 으로 하 는 실현 방법
  • 1)단순 배열 기반 구현:
    
    public class Stack{
      private int size;//    
      private int top;//       
      private char[] stackArray;//    
      public Stack(int size){
      	stackArray = new char[size];
      	top = -1;     //               ,      -1  
      	this.size = size;
      }
      //  ,     +1
      public void push(char item){
      	stackArray[++top] = item;
      }
      //  ,      ,       -1
      public int pop(){
      	return stackArray[top--];
      }
      //      ,   
      public char find(){
      	return stackArray[top];
      }
      //  
      public boolean isEmpty(){
      	return (top == -1);
      }
      //  
      public boolean isFull(){
      	return (top == size - 1);
      }
      public static void main(String[] args){
      	Stack stack = new Stack(5);
      	stack.push('a');
      	stack.push('b');
      	stack.push('c');
      	stack.push('d');
      	char ch = stack.find();
      	System.out.println(ch);
      }
    }
    실행 결과:
    d
    2)동적 배열 기반 구현:
    확장-나 에 게 주 는 느낌 은 마치 이사 하 는 것 같 고,물건 을 다 옮 겼 으 니,또 열 쇠 를 주인 에 게 주어 야 한 다 는 것 이다.
    
    public class Stack {
    	public int size;//    
      public int top;//       
      public static char[] stackArray;//    
      public Stack(int size){
      	stackArray = new char[size];
      	top = -1;     //               ,      -1     
      	this.size = size;
      }
      //  ,     +1
      public void push(char item){
      		if(isFull()){
      			doubleStack();
      		}
      		stackArray[++top] = item;
      }
      //       
      public void doubleStack(){
      	char[] newStackArray = new char[size*2];
      	for(int i = 0;i<size;i++){
      		newStackArray[i] = stackArray[i];
      	}
      	size = size*2;
      	stackArray = newStackArray;
      }
      //  ,      ,       -1
      public int pop(){
      	if(isEmpty()){
      		System.out.println("Stack is Empty");
      		return 0;
      	}else{ 		
      		return stackArray[top--];
      	}
      }
      //      ,   
      public char find(){
      	return stackArray[top];
      }
      //  
      public boolean isEmpty(){
      	return (top == -1);
      }
      //  
      public boolean isFull(){
      	return (top == size - 1);
      }
      public static void main(String[] args){
      	Stack stack = new Stack(5);
      	stack.push('a');
      	stack.push('b');
      	stack.push('c');
      	stack.push('d');
      	stack.push('e');
      	stack.push('f');
      	stack.push('g');
      	stack.push('h');//  8   
      	char ch = stack.find();
      	System.out.println(ch);
      	System.out.println(stackArray.length);
      }
    }
    실행 결과:
    h
    10
    3)링크 기반 구현
    링크 를 사용 하여 스 택 을 실현 하고 링크 의 헤더 에 요 소 를 삽입 하 는 방식 으로 push 작업 을 실현 하 며 링크 의 헤더 결산 점 을 삭제 하여 pop 작업 을 실현 합 니 다.시계 머리 결산 점 은 바로 창고 꼭대기 결산 점 이다.
    
    import java.util.EmptyStackException;
    class Link{
    	public char data;
    	public Link next;
    	public void show(){
    		System.out.println(data + " ");
    	}
    	public Link(char data){
    		this.data = data;
    	}
    }
    public class Stack2 {
    	Link head;
      public int size;//    
      public int top;//       
      public static char[] stackArray;//    
      public void push(char data){
      	if(head == null){
      		head = new Link(data);
      	}else{
      		Link node = new Link(data);
      		node.next = head;
      		head = node;
      	}
      }
      public void pop(){
      	if(head == null){
      		throw new EmptyStackException();
      	}else{
      		char dat = head.data;
      		head.show();
      		head = head.next;
      	}
      }
      public int top(){
      	if(head == null){
      		return 0;
      	}else{
      		return head.data;
      	}
      }
      public boolean isEmpty(){
      	if(head == null) return true;
      	return false;
      }
      public static void main(String[] args){
      	Stack2 stack = new Stack2();
      	stack.push('A');
      	stack.push('B');
      	stack.push('C');
      	stack.push('D');
      	stack.push('E');
      	stack.push('F');
      	stack.pop();
      }
    }
    실행 결과:
    F
    자바 스 택 의 세 가지 실현 방식(전체 버 전)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 스 택 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기