java stack tutorial stack class implementation with examples
이 튜토리얼은 예제의 도움으로 Java의 스택, Java 스택 클래스, 스택 API 메소드, 배열 및 링크 목록을 사용한 스택 구현에 대해 설명합니다.
스택은 Java Collection Framework에 속하는 정렬 된 데이터 구조입니다. 이 컬렉션에서 요소는 한쪽 끝에서만 추가 및 제거됩니다. 요소가 추가 및 제거되는 끝을 '스택의 맨 위'라고합니다.
추가 및 삭제는 한쪽 끝에서만 수행되므로 스택에 추가 된 첫 번째 요소는 스택에서 제거 된 마지막 요소가됩니다. 따라서 스택을 LIFO (Last-in, First-out) 데이터 구조라고합니다.
학습 내용 :
자바 스택 컬렉션
스택의 그림 표현은 아래에 나와 있습니다.
위의 표현 순서에서 볼 수 있듯이 처음에는 스택이 비어 있고 스택의 맨 위는 -1로 설정됩니다. 그런 다음 스택에 요소를 추가하는 데 사용되는 '푸시'작업을 시작합니다.
두 번째 표현에서는 요소 10을 푸시합니다.이 시점에서 상단이 증가합니다. 스택의 요소 20을 다시 밀어서 상단을 더 증가시킵니다.
마지막 표현에서는 '팝'작업을 시작합니다. 이 작업은 스택에서 요소를 제거하는 데 사용됩니다. 현재 'Top'을 가리키는 요소는 팝 작업에 의해 제거됩니다.
스택 데이터 구조는 다음 작업을 지원합니다.
- 푸시: 스택에 요소를 추가합니다. 결과적으로 상단의 값이 증가합니다.
- 팝: 스택에서 요소가 제거됩니다. 팝 작업 후 상단 값이 감소합니다.
- 몰래 엿보다: 이 작업은 요소를 조회하거나 검색하는 데 사용됩니다. 상단의 값은 수정되지 않습니다.
스택에서 요소를 추가 / 제거하기위한 끝으로 사용되는 스택의 맨 위는 특정 순간에 다양한 값을 가질 수도 있습니다. 스택의 크기가 N이면 스택의 맨 위는 스택이 어떤 상태에 있는지에 따라 다른 조건에서 다음 값을 갖습니다.
스택 상태 | 최고 가치 |
---|---|
빈 스택 | -1 |
스택의 한 요소 | 0 |
전체 스택 | N-1 |
오버플로 (요소> N) | 엔 |
자바의 스택 클래스
Java Collection Framework는 'Stack'이라는 클래스를 제공합니다. 이 Stack 클래스는 Vector 클래스를 확장하고 Stack 데이터 구조의 기능을 구현합니다.
아래 다이어그램은 Stack 클래스의 계층 구조를 보여줍니다.
위의 다이어그램에서 볼 수 있듯이 Stack 클래스는 컬렉션 인터페이스의 List 인터페이스를 구현하는 Vector 클래스를 상속합니다.
Stack 클래스는 java.util 패키지의 일부입니다. 프로그램에 Stack 클래스를 포함하기 위해 다음과 같이 import 문을 사용할 수 있습니다.
import java.util.*;
또는
import java.util.Stack;
자바에서 스택 생성
Stack 클래스를 가져 오면 아래와 같이 Stack 객체를 만들 수 있습니다.
Stack mystack = new Stack();
다음과 같이 일반 유형의 Stack 클래스 개체를 만들 수도 있습니다.
Stack myStack = new Stack;
여기서 data_type은 Java에서 유효한 데이터 유형이 될 수 있습니다.
예를 들면 ,다음과 같은 Stack 클래스 객체를 만들 수 있습니다.
Stack stack_obj = new Stack(); Stack str_stack = new Stack();
Java의 스택 API 메서드
Stack 클래스는 Stack에서 데이터를 추가, 제거 및 검색하는 메서드를 제공합니다. 스택이 비어 있는지 확인하는 방법도 제공합니다. 아래 섹션에서 이러한 방법에 대해 설명합니다.
스택 푸시 작업
푸시 작업은 스택에 요소를 푸시하거나 추가하는 데 사용됩니다. 스택 인스턴스를 생성 한 후에는 푸시 작업을 사용하여 스택 객체 유형의 요소를 스택에 추가 할 수 있습니다.
다음 코드는 값으로 정수 스택을 초기화하는 데 사용됩니다.
Stack myStack = new Stack(); myStack.push(10); myStack.push(15); myStack.push(20);
위 코드 실행의 결과로 얻은 초기 스택은 다음과 같습니다.
와우에서 플레이하기 가장 좋은 서버
아래와 같이 push () 작업을 다시 수행하면
push(25);
결과 스택은 다음과 같습니다.
스택 팝 작업
'팝'작업을 사용하여 스택에서 요소를 제거 할 수 있습니다. 현재 Top이 가리키는 요소는 스택에서 튀어 나옵니다.
다음 코드는이를 달성합니다.
Stack intStack = new Stack(); intStack.push(100); intStack.push(200); int val = intStack.pop();
변수 val은 스택으로 푸시 된 마지막 요소이므로 값 200을 포함합니다.
푸시 및 팝 작업에 대한 스택 표현은 다음과 같습니다.
스택 엿보기 작업
엿보기 작업은 요소를 제거하지 않고 스택의 맨 위를 반환합니다. 위의 스택 예에서 'intStack.peek ()'은 200을 반환합니다.
스택 isEmpty 작업
Stack 클래스의 isEmpty () 작업은 스택 개체가 비어 있는지 확인합니다. 스택에 요소가 없으면 true를 반환하고 그렇지 않으면 false를 반환합니다.
스택 검색 작업
검색 () 연산을 사용하여 스택에서 요소를 검색 할 수 있습니다. 검색 () 작업은 검색중인 요소의 인덱스를 반환합니다. 이 인덱스는 스택 맨 위에서 계산됩니다.
Stack intStack = new Stack (); intStack.push (100); intStack.push (200); int index = inStack.search(100); //index will have the value 2.
스택 크기
Stack 객체의 크기는 java.util.Stack.size () 방법. 스택의 총 요소 수를 반환합니다.
다음 예제는 스택 크기를 인쇄합니다.
Stack myStack = new Stack(); myStack.push(100); myStack.push(200); myStack.push(300); System.out.println('Stack size:' + myStack.size()); //Stack size: 3
스택 요소 인쇄 / 반복
스택에 대한 반복기를 선언 한 다음이 반복기를 사용하여 전체 스택을 순회 할 수 있습니다. 이렇게하면 각 스택 요소를 하나씩 방문하여 인쇄 할 수 있습니다.
다음 프로그램은 반복기를 사용하여 Stack을 반복하는 방법을 보여줍니다.
import java.util.*; public class Main { public static void main(String() args) { //declare and initialize a stack object Stack stack = new Stack(); stack.push('PUNE'); stack.push('MUMBAI'); stack.push('NASHIK'); System.out.println('Stack elements:'); //get an iterator for the stack Iterator iterator = stack.iterator(); //traverse the stack using iterator in a loop and print each element while(iterator.hasNext()){ System.out.print(iterator.next() + ' '); } } }
산출:
스택 요소 :
푸네 뭄바이 나 시크
Java 8을 사용하여 스택
또한 Stream API, forEach 및 forEachRemaining 구조와 같은 Java 8 기능을 사용하여 스택 요소를 인쇄하거나 탐색 할 수 있습니다.
다음 프로그램은 스택을 통과하는 Java 8 구성의 사용법을 보여줍니다.
import java.util.*; import java.util.stream.*; public class Main { public static void main(String() args) { //declare and initialize a stack object Stack stack = new Stack(); stack.push('PUNE'); stack.push('MUMBAI'); stack.push('NASHIK'); System.out.println('Stack elements using Java 8 forEach:'); //get a stream for the stack Stream stream = stack.stream(); //traverse though each stream object using forEach construct of Java 8 stream.forEach((element) -> { System.out.print(element + ' '); // print element }); System.out.println('
Stack elements using Java 8 forEachRemaining:'); //define an iterator for the stack Iterator stackIterator = stack.iterator(); //use forEachRemaining construct to print each stack element stackIterator.forEachRemaining(val -> { System.out.print(val + ' '); }); } }
산출:
Java 8 forEach를 사용하여 요소 스택 :
푸네 뭄바이 나 시크
Java 8 forEachRemaining을 사용하여 요소 스택 :
푸네 뭄바이 나 시크
자바에서 스택 구현
다음 프로그램은 다양한 스택 작업을 보여주는 세부 스택을 구현합니다.
import java.util.Stack; public class Main { public static void main(String a()){ //declare a stack object Stack stack = new Stack(); //print initial stack System.out.println('Initial stack : ' + stack); //isEmpty () System.out.println('Is stack Empty? : ' + stack.isEmpty()); //push () operation stack.push(10); stack.push(20); stack.push(30); stack.push(40); //print non-empty stack System.out.println('Stack after push operation: ' + stack); //pop () operation System.out.println('Element popped out:' + stack.pop()); System.out.println('Stack after Pop Operation : ' + stack); //search () operation System.out.println('Element 10 found at position: ' + stack.search(10)); System.out.println('Is Stack empty? : ' + stack.isEmpty()); } }
산출:
초기 스택 : ()
스택이 비어 있습니까? : 진실
푸시 작업 후 스택 : (10, 20, 30, 40)
튀어 나온 요소 : 40
팝 작업 후 스택 : (10, 20, 30)
위치에서 발견 된 요소 10 : 3
스택이 비어 있습니까? : 거짓
기본 게이트웨이를 사용할 수 없음 수정 Windows 10
Java에서 배열에 스택
스택 데이터 구조는 Stack 클래스의 'toArray ()'메서드를 사용하여 Array로 변환 할 수 있습니다.
다음 프로그램은이 변환을 보여줍니다.
import java.util.*; import java.util.stream.*; public class Main { public static void main(String() args) { //declare and initialize a stack object Stack stack = new Stack(); stack.push('PUNE'); stack.push('MUMBAI'); stack.push('NASHIK'); //print the stack System.out.println('The Stack contents: ' + stack); // Create the array and use toArray() method to convert stack to array Object() strArray = stack.toArray(); //print the array System.out.println('The Array contents:'); for (int j = 0; j 산출:
스택 내용 : (PUNE, MUMBAI, NASHIK)
배열 내용 :
푸네 뭄바이 나 시크
배열을 사용하여 Java에서 스택 구현
스택은 배열을 사용하여 구현할 수 있습니다. 모든 스택 작업은 배열을 사용하여 수행됩니다.
아래 프로그램은 배열을 사용한 스택 구현을 보여줍니다.
import java.util.*; //Stack class class Stack { int top; //define top of stack int maxsize = 5; //max size of the stack int() stack_arry = new int(maxsize); //define array that will hold stack elements Stack(){ //stack constructor; initially top = -1 top = -1; } boolean isEmpty(){ //isEmpty () method return (top <0); } boolean push (int val){ //push () method if(top == maxsize-1) { System.out.println('Stack Overflow !!'); return false; } else { top++; stack_arry(top)=val; return true; } } boolean pop () { //pop () method if (top == -1) { System.out.println('Stack Underflow !!'); return false; } else { System.out.println('
Item popped: ' + stack_arry(top--)); return true; } } void display () { //print the stack elements System.out.println('Printing stack elements .....'); for(int i = top; i>=0;i--) { System.out.print(stack_arry(i) + ' '); } } } public class Main { public static void main(String() args) { //define a stack object Stack stck = new Stack(); System.out.println('Initial Stack Empty : ' + stck.isEmpty()); //push elements stck.push(10); stck.push(20); stck.push(30); stck.push(40); System.out.println('After Push Operation...'); //print the elements stck.display(); //pop two elements from stack stck.pop(); stck.pop(); System.out.println('After Pop Operation...'); //print the stack again stck.display(); } }
산출:
초기 스택 비어 있음 : true
푸시 작업 후…
스택 요소 인쇄… ..
40 30 20 10
터진 항목 : 40
튀어 나온 항목 : 30
팝 작업 후…
스택 요소 인쇄… ..
20 10
연결된 목록을 사용한 스택 구현
스택은 배열을 사용하여 수행 한 것과 마찬가지로 연결 목록을 사용하여 구현할 수도 있습니다. 스택 구현을 위해 연결 목록을 사용하는 한 가지 장점은 동적으로 확장하거나 축소 할 수 있다는 것입니다. 배열과 같이 최대 크기 제한이 필요하지 않습니다.
다음 프로그램은 스택 작업을 수행하기 위해 연결 목록을 구현합니다.
import static java.lang.System.exit; // Stack class using LinkedList class Stack_Linkedlist { // Define Node of LinkedList private class Node { int data; // node data Node nlink; // Node link } // top of the stack Node top; // stack class Constructor Stack_Linkedlist() { this.top = null; } // push () operation public void push(int val) { // create a new node Node temp = new Node(); // checks if the stack is full if (temp == null) { System.out.print('
Stack Overflow'); return; } // assign val to node temp.data = val; // set top of the stack to node link temp.nlink = top; // update top top = temp; } // isEmpty () operation public boolean isEmpty() { return top == null; } // peek () operation public int peek() { // check if the stack is empty if (!isEmpty()) { return top.data; } else { System.out.println('Stack is empty!'); return -1; } } // pop () operation public void pop() { // check if stack is out of elements if (top == null) { System.out.print('
Stack Underflow!!'); return; } // set top to point to next node top = (top).nlink; } //print stack contents public void display() { // check for stack underflow if (top == null) { System.out.printf('
Stack Underflow!!'); exit(1); } else { Node temp = top; System.out.println('Stack elements:'); while (temp != null) { // print node data System.out.print(temp.data + '->'); // assign temp link to temp temp = temp.nlink; } } } } public class Main { public static void main(String() args) { // Create a stack class object Stack_Linkedlist stack_obj = new Stack_Linkedlist(); // push values into the stack stack_obj.push(9); stack_obj.push(7); stack_obj.push(5); stack_obj.push(3); stack_obj.push(1); // print Stack elements stack_obj.display(); // print current stack top System.out.println('
Stack top : ' + stack_obj.peek()); // Pop elements twice System.out.println('Pop two elements'); stack_obj.pop(); stack_obj.pop(); // print Stack elements stack_obj.display(); // print new stack top System.out.println('
New Stack top:' + stack_obj.peek()); } }
산출:
스택 요소 :
1-> 3-> 5-> 7-> 9->
스택 상단 : 1
두 요소 팝
스택 요소 :
5-> 7-> 9->
새로운 스택 상단 : 5
자주 묻는 질문
Q # 1) Java에서 스택이란 무엇입니까?
대답: 스택은 요소를 저장하기위한 LIFO (Last in, First Out) 데이터 구조입니다. 스택 요소는 스택 상단이라는 한쪽 끝에서 스택에 추가되거나 제거됩니다.
스택에 요소를 추가하는 작업은 푸시 작업을 사용하여 수행됩니다. 요소 삭제는 팝 작업을 사용하여 수행됩니다. Java에서 스택은 Stack 클래스를 사용하여 구현됩니다.
Q # 2) Stack은 Java로 컬렉션입니까?
.torrent 파일 사용 방법
대답: 예. 스택은 Java 1.0의 Collection API에서 사용할 수있는 Java의 레거시 컬렉션입니다. Stack은 List 인터페이스의 Vector 클래스를 상속합니다.
Q # 3) 스택은 인터페이스입니까?
대답: 인터페이스 스택은 후입 선출 구조를 설명하는 인터페이스이며 재귀 문제의 상태를 저장하는 데 사용됩니다.
Q # 4) 스택은 무엇에 사용됩니까?
답변 : 다음은 스택의 주요 응용 프로그램입니다.
- 식 평가 및 변환 : 스택은 식을 접미사, 중위 및 접두사로 변환하는 데 사용됩니다. 또한 이러한 식을 평가하는 데 사용됩니다.
- 스택은 구문 트리를 구문 분석하는데도 사용됩니다.
- 스택은 표현식에서 괄호를 확인하는 데 사용됩니다.
- 스택은 역 추적 문제를 해결하는 데 사용됩니다.
- 함수 호출은 스택을 사용하여 평가됩니다.
Q # 5) 스택의 장점은 무엇입니까?
대답: 스택에 저장된 변수는 반환 될 때 자동으로 삭제됩니다. 스택은 메모리가 할당되고 할당 해제 될 때 더 나은 선택입니다. 스택은 또한 메모리를 정리합니다. 그 외에도 스택을 효과적으로 사용하여 표현식을 평가하고 표현식을 구문 분석 할 수 있습니다.
결론
이것으로 Java의 스택에 대한 자습서가 완료되었습니다. Stack 클래스는 컬렉션 API의 일부이며 푸시, 팝, 픽 및 검색 작업을 지원합니다. 요소는 한쪽 끝에서만 스택에 추가되거나 제거됩니다. 이 끝을 스택 상단이라고합니다.
이 자습서에서는 스택 클래스에서 지원하는 모든 메서드를 살펴 보았습니다. 또한 배열과 연결 목록을 사용하여 스택을 구현했습니다.
다음 튜토리얼에서 다른 컬렉션 클래스를 진행할 것입니다.
추천 도서