728x90
1.스택(Stack)

스택(stack)이란 쌓아 올린다는 것을 의미한다.
#스택의 특징
- 스택은 같은 구조와 크기의 자료를 정해진 방향으로만 쌓을수 있고,top으로 정한 곳을 통해서만 접근할 수 있다.
- top에는 가장 위에 있는 자료는 가장 최근에 들어온 자료를 가리키고 있으며,삽입되는 새 자료는 top이 가리키는 자료의 위에 쌓이게 된다.
- 스택에서 자료를 삭제할 때도 top을 통해서만 가능하다.
- 후입선출(LIFO: Last In First Out)의 자료구조이며, 접근이 목록의 끝(Top 또는 Top Pointer)에서만 일어나기 때문에 Pushdown List 라고도 합니다.
- 스택에서 입력은 push, 출력은 pop, Top 위치의 데이터 확인은 peek 를 사용합니다.
#스택이 실제로 사용되는 경우
- 운영체제(OS: Operating System)
프로그램에서 사용되는 함수들을 스택 자료형에 저장하여 사용한다.. - 컴파일러(Compiler)
수학 기호들을 기계어로 변환시 사용한다. - 자바 가상 머신(JVM: Java Virtual Machine)
JVM 내에서 메서드가 실행, 종료될 때 스택 프레임을 이용하여 관리한다.
JAVA로 구현한 스택 소스코드
package data_structure;
interface Stack{
boolean isEmpty();
boolean isFull();
void push(char item);
char pop();
char peek();
void clear();
}
public class MyStack implements Stack{
private int top;
private int stackSize;
private char stackArr[];
//스택을 생성하는 생성자
public MyStack(int stackSize){
top = -1; //스택 포인터 초기화
this.stackSize = stackSize; //스택사이즈 설정
stackArr = new char[this.stackSize]; //스택 배열 생성
}
//스택이 비어 있는지 확인
public boolean isEmpty() {
//스택포인터가 -1인 경우 데이터가 없는 상태이므로 true 아닌 경우 false 를 리턴,
return (top== -1);
}
//스택이 가득찬 상태인지 확
public boolean isFull() {
//스택 포인터가 스택의 마지막 인덱스와 동일한 경우 true 아닌 경우 false 를 리턴;
return(top == this.stackSize-1);
}
//스택에 데이터 추가
public void push(char item) {
if(isFull()){
System.out.println("stack is full");
}else{
stackArr[++top] = item; //다음 스택 포인터가 가리키는 인덱스에 데이터 추가
System.out.println("Inserted item : "+ item);
}
}
//스택의 최상위(마지막) 데이터 추출 후 삭제
public char pop() {
if(isEmpty()){
System.out.println("Deleting fail! Stack is empty");
return 0;
}else{
System.out.println("Deleted item : "+ stackArr[top]);
return stackArr[top--];
}
}
// 스택의 최상위(마지막) 데이터 추출
public char peek() {
if(isEmpty()){
System.out.println("Peeking fail! Stack is empty");
return 0;
}else{
System.out.println("Peeked Item : "+ stackArr[top]);
return stackArr[top];
}
}
//스택 초기화
public void clear() {
if(isEmpty()){
System.out.println("Stack is already empty!");
}else{
top = -1; //스택 포인터 초기화
stackArr = new char[this.stackSize]; //새로운 스택 배열 생성
System.out.println("Stack is clear!");
}
}
//스택에 저장된 모든 데이터 출력
public void printStack(){
if(isEmpty()){
System.out.print("Stack is Empty");
}else{
System.out.print("Stack is element : ");
for(int i=0; i<=top; i++){
System.out.print(stackArr[i]+" ");
}
System.out.println();
}
}
실행코드와 결과
public static void main(String[] args) {
int stackSize = 5;
MyStack arrStack = new MyStack(stackSize);
arrStack.push('A');
arrStack.printStack();
arrStack.push('B');
arrStack.printStack();
arrStack.push('C');
arrStack.printStack();
arrStack.pop();
arrStack.printStack();
arrStack.pop();
arrStack.printStack();
arrStack.peek();
arrStack.printStack();
arrStack.clear();
arrStack.printStack();
}
결과

다음엔 큐(queue)에 대해서 정리해보겠습니다.😁🙈
728x90
'Dev > 알고리즘 ,자료구조' 카테고리의 다른 글
| [Algorithm]BeakJoon_1330 (0) | 2021.07.18 |
|---|---|
| Insertion_Sort(삽입 정렬) (0) | 2021.06.30 |
| Selection_Sort(선택 정렬) (0) | 2021.06.29 |
| Bubble_Sort(거품 정렬)+JAVA로 구현 (0) | 2021.06.28 |
| 자료구조_배열(Array) (0) | 2021.03.11 |