스택은 Java 언어에서 가장 중요한 데이터 구조 중 하나이며 구현에는 최소한 다음 메서드가 포함되어야 합니다.
1. pop() 팝 작업, 스택의 최상위 요소를 팝합니다.
2.push(E e) 푸시 동작
3.peek() 스택의 최상위 요소를 봅니다.
4.isEmpty() 스택이 비어 있습니까?
또한 스택을 구현할 때 다음과 같은 몇 가지 문제를 고려해야 합니다.
1. 스택의 초기 크기와 스택이 가득 찬 후 새로운 스택 공간을 추가하는 방법
2. 스택 업데이트 시 동기화가 필요합니다.
배열을 사용하여 스택을 구현하는 간단한 예의 코드는 다음과 같습니다.
다음과 같이 코드 코드를 복사합니다.
공개 클래스 Stack<E> {
// Java에서는 Generic Array를 지원하지 않습니다. 꼭 사용해야 하는 경우 Java에서 제공하는 컨테이너를 사용하세요.
개인 Object[] 스택;
//스택의 기본 초기 크기
개인 정적 최종 int INIT_SIZE = 2;
//스택 탑 인덱스
비공개 int 인덱스;
공개스택() {
스택 = 새 개체[INIT_SIZE];
지수 = -1;
}
/**
*시공방법
*
* @param initSize
* 스택의 초기 크기
*/
공개 스택(int initSize) {
if (initSize < 0) {
새로운 IllegalArgumentException()을 던져라;
}
스택 = 새로운 객체[initSize];
지수 = -1;
}
/**
* 팝 작업
*
* @return 스택 최상위 객체
*/
공개 동기화 E pop() {
if (!isEmpty()) {
E 온도 = 엿보기();
스택[인덱스--] = null;
복귀온도;
}
null을 반환;
}
/**
* 푸시 작업
*
* @param obj
* 스택에 푸시되기를 기다리는 객체
*/
공개 동기화 무효 푸시(E obj) {
if (isFull()) {
객체[] 온도 = 스택;
// 스택이 가득 차면 현재 스택 공간의 두 배로 스택을 생성합니다.
스택 = 새로운 객체[2 * stack.length];
System.arraycopy(temp, 0, stack, 0, temp.length);
}
스택[++인덱스] = obj;
}
/**
* 스택의 최상위 개체 보기
*
* @return 스택 최상위 객체
*/
공개 E peek() {
if (!isEmpty()) {
return (E) 스택[인덱스];
}
null을 반환;
}
/**
* 스택이 비어 있는지 확인
*
* @return 스택이 비어 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
*/
공개 부울 isEmpty() {
반환 인덱스 == -1;
}
/**
* 스택이 가득 찼는지 확인
*
* @return 스택이 가득 차면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
*/
공개 부울 isFull() {
반환 인덱스 >= stack.length - 1;
}
}
마지막으로 스택의 데이터 구조(java.util.Stack)는 Java로 구현됩니다. 이는 Vector 클래스를 상속하여 구현됩니다.