자바 스 택 의 세 가지 실현 방식(전체 버 전)
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());
}
}
창고 의 주요 조작창고 의 보조 조작
스 택 추상 데이터 형식 은 여러 가지 실현 방식 이 있 습 니 다.다음은 자주 사용 하 는 방법 입 니 다.
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
자바 스 택 의 세 가지 실현 방식(전체 버 전)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 스 택 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!