기본 콘텐츠로 건너뛰기

[DATA STRUCTURE] Stack 스택


What is Stack

A stack is an Abstract Data Type (ADT), commonly used in most programming languages. It is named stack as it behaves like a real-world stack, for example – a deck of cards or a pile of plates, etc.

Basic Operations

  • push() − Pushing (storing) an element on the stack.
  • pop() − Removing (accessing) an element from the stack.
  • peek() − get the top data element of the stack, without removing it.
  • isFull() − check if stack is full.
  • isEmpty() − check if stack is empty.


스택(Stack)의 사용 사례

재귀 알고리즘을 사용하는 경우 스택이 유용하다.


  • 재귀 알고리즘

재귀적으로 함수를 호출해야 하는 경우에 임시 데이터를 스택에 넣어준다.

재귀함수를 빠져 나와 퇴각 검색(backtrack)을 할 때는 스택에 넣어 두었던 임시 데이터를 빼 줘야 한다.

스택은 이런 일련의 행위를 직관적으로 가능하게 해 준다.

또한 스택은 재귀 알고리즘을 반복적 형태(iterative)를 통해서 구현할 수 있게 해준다.

  • 웹 브라우저 방문기록 (뒤로가기)
  • 실행 취소 (undo)
  • 역순 문자열 만들기
  • 수식의 괄호 검사 (연산자 우선순위 표현을 위한 괄호 검사)
  • Ex) 올바른 괄호 문자열(VPS, Valid Parenthesis String) 판단하기
  • 후위 표기법 계산
public class StackTest1 {
    public static void main(String[] args) {
        Stack<Objectstack = new Stack<>();
        int[] arr = {10,20,30,40,50};

        System.out.println(stack.empty()); //True or False

        System.out.println("----------------------------------------------");

        Arrays.stream(arr).forEach(e -> System.out.println(stack.push(e)));

        System.out.println("----------------------------------------------");
        stack.push(7);
        System.out.println(stack); // 10,20,30,40,50,7
        System.out.println("----------------------------------------------");
        stack.pop();
        System.out.println(stack);//pop 7 out

        System.out.println("----------------------------------------------");

        System.out.println("current top is : " +stack.peek()); //top is 50

        System.out.println("----------------------------------------------");

        // 스택에 해당 값이 있는지 확인하고 없으면 -1, 있으면 해당하는 인덱스 값 반환(맨 위부터 1)
        System.out.println("Search(30) index is :" + stack.search(30)); // search element in stack

        System.out.println("----------------------------------------------");

        while (!stack.empty()) {
            // LIFO
            // pop out all elements in stack
            System.out.println(stack.pop());
            
        }
    }
}

References




댓글

이 블로그의 인기 게시물

[DATA STRUCTURE] 큐 QUEUE

큐[QUEUE]의개념 Queue is an abstract data structure, somewhat similar to Stacks.  Unlike stacks, a queue is open at both its ends. One end is always used to insert data (enqueue) and the other is used to remove data (dequeue).  Queue follows First-In-First-Out methodology, i.e., the data item stored first will be accessed first. First In First Out Basic Operation Queue operations may involve initializing or defining the queue, utilizing it, and then completely erasing it from the memory. Here we shall try to understand the basic operations associated with queues − enqueue() − add (store) an item to the queue. dequeue() − remove (access) an item from the queue. Few more functions are required to make the above-mentioned queue operation efficient. These are − peek() − Gets the element at the front of the queue without removing it. isfull() − Checks if the queue is full.[Boolean] isempty() − Checks if the queue is empty.[Boolean] 큐의사용 예 너비 우선 탐색(BFS, Breadth-First Search) 구현 처리해야 할 노...

기본적인 MongoDB 사용/자바연동

mongoDB 명령어 db: 현재 사용 중인 데이터베이스 확인 -test :Default로 들어가 있는 test 테이블 show dbs : DB의 리스트 확인 show collections : collection 리스트 확인, collection = table in mongoDB show tables : 위 명령어와 같음 db.stats() : 데이터베이스 상태 확인 db.(db명).drop(): 안에 있는 데이터 삭제 mongod --version => mongodb 확인 mongo -version => shell 확인 use 테이블 명: 테이블 생성 db.dropDatabase() : 접속된 테이블 삭제 -테이블 확인 필요!! db.createCollection(“테이블 명”): 테이블 생성 db.테이블 명.drop(): 테이블 지움 db.blog[테이블 명].insert({“name ” : “ nodejs”}) : 내용(Document)을 추가 db.테이블 명.insert([ {“ ” : “ ”},{“ ” : “ ”}]); -여러 Documents를 하나의 테이블에 넣는 방법 db.blog[테이블 명].find() : 내용 확인 db.테이블 명.find().pretty() : 보기 좋게 검색 id : primary key를 자동으로 부여해줌 db.테이블 명.remove({“name” : “book01”}) : 특정한 Documents를 지우는 법 insert 문 count 문 연산자 몽고디비 비교 연산자 $eq 2. $gt 3. $gte 4. $lt 5. $lte ne : 주어진 값과 일치 하지 않는 값 in: 주어진 배열 안에 속하는 값 nin: 주어진 배열 안에 속하지 않는 값 몽고디비 논리연산자 1.$or: 주어진 조건 중 하나라도 tr...

CentOs7 설치

1.새로 만들기에서 Hadoop01 (임의)가상머신 만들기     *insert로 centOS7 삽입. 2.키보드 레이아웃 설정 -설치도중 키보드 레이아웃 영어[미국]선택 3.소프트웨어 선택에서 개발 및 창조를 위한 워크스테이션 선택-> 완료 4.네트워크 설정에서 이더넷 0s3을 선택 오른쪽 윗편에 켬을 클릭하고 완료 5. 설치대상에서 파티션 설정 6.자동으로 생성을 클릭 7.수동으로 파티션 설정에서 “swap”와 “/”를 일단 제거 6.새 마운트 지점 추가에서 “swap”를 용량 5g로 추가 7.새 마운트 추가에서 “/”를 추가 용량을 빈 상태로 두면 나머지 용량이 할당. 8.아래와 같이 설정되면 완료를 클릭 9.변경 사항 적용 클릭 10. 상기를 다 설정하면 전체 시작을 클릭 11. root암호와 사용자 생성 설정 12.아래와 같이 사용자 설정.     *이 사용자를 관리자로 합니다. 꼭 체크 13.설치 완료 클릭 --------------------------------------centOS 7 네트워크 설정------------------------------------------ 1.CentOs7 network 설정 [ cd /etc/sysconfig/network-scripts/ ] 로 이동 2.[ vi ifcfg-enp0s8 ]입력해서 아래와 같이 Edit    reboot 3.service network restart입력 후 ifconfig로 확인 4.JAVA 1.8을 설치해야함! JAVA SE Development Kit 8u161을 다운 받아야지 워닝 경고창이 안뜸! 5.JAVA 환경 설정 vi /etc/profile export JAVA_HOME=/usr/loc...