배열 로 스 택 구현(자바 구현)
창 고 는 먼저 들 어간 후에 나 오 는 서열 표 이다.
스 택 은 선형 표 에서 요소 의 삽입 과 삭 제 를 제한 하 는 특수 한 선형 표 로 삽입 과 삭 제 를 허용 하 는 한 끝 을 변화 하 는 한 끝 이 라 고 부 르 고 다른 한 끝 은 고정된 한 끝 이 라 고 부 르 며 스 택 바닥 이 라 고 부른다.
스 택 에 가장 먼저 넣 은 요 소 는 스 택 밑 에 있 고 마지막 에 넣 은 요 소 는 스 택 꼭대기 에 있 습 니 다.
가장 먼저 스 택 에서 나 오 는 요 소 는 스 택 꼭대기 에 있 고 마지막 으로 스 택 에서 나 오 는 요 소 는 스 택 밑 에 있 습 니 다.
분석 하 다.
배열 을 사용 하여 스 택 의 실현 을 모 의 합 니 다.먼저 배열 의 길이 가 고정 되 어 있 는 것 을 고려 하여 스 택 을 사용 하려 면 특정한 길이,즉 최대 길이 인 MaxSize 를 주어 야 합 니 다.스 택 상단 지침 을 사용자 정의 하고 데 이 터 를-1 로 초기 화 합 니 다.배열 의 색인 값 은 0 에서 시작 되 기 때문에 충돌 을 일 으 키 지 않 기 위해-1 부터 시작 합 니 다.
스 택 이 비어 있 습 니 다:top=-1 일 때 데 이 터 를 초기 화 하 는 것 과 같 습 니 다.배열 에 요소 가 존재 하지 않 으 면 스 택 이 비어 있 음 을 설명 합 니 다.
스 택 가득:요 소 를 추가 하면 서 스 택 상단 지침 은 뒤로 이동 하지만 배열 의 길이 가 고정 되 어 있 는 것 을 고려 하면 꽉 찬 상황 이 존재 합 니 다.판단 조건 은 top=MaxSize-1 일 때 스 택 이 꽉 찼 습 니 다.예 를 들 어 3 개의 크기 를 정의 하 는 배열 은 하나의 데이터 1 을 넣 고 top 은-1 에서 0 으로 바 꾸 고 하나의 데이터 2 를 넣 으 며 top 은 0 에서 1 로 바 뀌 고 하나의 데이터 3 을 넣 으 며 top 은 1 에서 2 로 바 뀌 었 다.이때 배열 은 이미 꽉 찼 고 판단 조건 은 top=MaxSize 로 스 택 이 꽉 찼 다.
창고 에 들 어가 기 전에 창고 가 꽉 찼 는 지 판단 해 야 합 니 다.그렇지 않 으 면 창고 에 들 어 갈 수 없습니다.top+1 을 배열 색인 을 top 으로 하 는 요소 에 추가 한 데이터 로 할당 합 니 다.
스 택 나 가기 전에 스 택 이 비어 있 는 지 여 부 를 판단 합 니 다.그렇지 않 으 면 스 택 을 나 갈 수 없습니다.비어 있 지 않 으 면 스 택 꼭대기 의 요 소 를 먼저 가 져 옵 니 다.즉,색인 값 이 top 인 요 소 를 가 져 온 다음 에 top-1 을 가 져 옵 니 다.
스 택 옮 겨 다 니 기:스 택 이 비어 있 는 지 여 부 를 판단 해 야 합 니 다.데 이 터 를 옮 겨 다 니 는 것 도 스 택 꼭대기 요소 부터 옮 겨 다 니 기 시 작 했 습 니 다.스 택 밑 까지 옮 겨 다 니 면 끝 납 니 다.
코드 구현
package cn.mrlij.stack;
import java.util.Arrays;
import java.util.Scanner;
/**
*
*
* @author dreamer
*
*/
public class ArrayStackDemo {
public static void main(String[] args) {
//
ArrayStack a = new ArrayStack(5);
boolean flag = true;//
Scanner sc = new Scanner(System.in);
String key = "";//
while (flag) {
System.out.println("show: ");
System.out.println("exit: ");
System.out.println("push: ");
System.out.println("pop: ");
key = sc.nextLine();
switch (key) {
case "show":
a.show();
break;
case "exit":
flag = false;
System.out.println(" !");
break;
case "push":
System.out.println(" :");
int val = sc.nextInt();
a.push(val);
break;
case "pop":
try {
int pop = a.pop();
System.out.println(" :" + pop);
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
}
break;
default:
break;
}
}
}
}
class ArrayStack {
private int MaxSize;//
private int[] arr;// ,
private int top = -1;// , -1
public ArrayStack(int maxSize) {
this.MaxSize = maxSize;
arr = new int[MaxSize];
}
//
public boolean isEmpty() {
return top == -1;
}
//
public boolean isFull() {
System.out.println(" :" + top + " :" + MaxSize);
return top == MaxSize - 1;
}
//
public void push(int val) {
// ,
if (isFull()) {
System.out.println(" ~~");
return;
}
top++;
arr[top] = val;
}
//
public int pop() {
//
if (isEmpty()) {
throw new RuntimeException(" , !");
}
int val = arr[top];
top--;
return val;
}
public void show() {
if (isEmpty()) {
System.out.println(" ");
return;
}
for (int i = top; i >= 0; i--) {
System.out.print(arr[i] + "\t");
}
System.out.println();
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.