본문 바로가기
DSA

스택(Stack) 2

by KWONE 2024. 8. 19.
 class element {
		int top=-1;
		public static final int MAX_STACK_SIZE=100;
		int stack[]=new int[MAX_STACK_SIZE];
		public boolean is_empty() {
			return (top==-1);
		}
		public boolean is_full() {
			return (top==(this.MAX_STACK_SIZE-1));
		}
		public void push(int item) {
			if(is_full()) {
				System.out.println("스택 포화 에러");
				return ;
			}
			else stack[++top]=item;
		}
		public int pop() {
			if(is_empty()) {
				System.out.println("스택 공백 에러");
				return 0;
			}
			else return stack[top--];
		}
		public int peek() {
			if(is_empty()) {
				System.out.println("스택 공백 에러");
				return 0;
			}
			else return stack[top]; 
		}
	}
public class Stack {
	public static void main(String[] args) {
		 element st=new element();
		 st.push(1);
		 st.push(2);
		 st.push(3);
		 System.out.println(st.pop());
		 System.out.println(st.pop());
		 System.out.println(st.pop());
	}
}

first in - first out 임을 확인할 수 있다. 자바로 나타낸 스택이다.

2024.07.22 - [Algorithm] - 스택 (stack)

 

스택 (stack)

스택은 후입선출의 입출력형태를 나타낸다. (Last-in, First-out)ADT 추상 자료형으로 스택을 나타내면 다음과 같다.객체: 0개 이상의 원소를 가지는 유한 선형 리스트연산:create(size) ::= 최대 크기가 siz

kwone.tistory.com

 

#include <stdio.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 100
#define MAX_STRING 100

typedef int element;
typedef struct {
	element data[MAX_STACK_SIZE];
	int top;
}StackType;

void init_stack(StackType* s) {
	s->top = -1;
}
int is_empty(StackType*s) {
	return  (s->top == -1);
}
int is_full(StackType* s) {
	return (s->top == MAX_STACK_SIZE - 1);
}
void push(StackType* s, element item) {
	if (is_full(&s)) {
		fprintf(stderr, "스택 포화 에러");
		return;
	}
	else s->data[++(s->top)] = item;
}
element pop(StackType* s) {
	if (is_empty(&s)) {
		fprintf(stderr, "스택 공백 에러");
		exit(1);
	}
	else return s->data[(s->top)--];
}
element peek(StackType* s) {
	if (is_empty(&s)) {
		fprintf(stderr, "스택 공백 에러");
		exit(1);
	}
	else return s->data[(s->top)];
}
int main(void) {
	StackType *sp;
	sp = (StackType*)malloc(sizeof(StackType));
	init_stack(&sp);
	push(&sp, 1);
	push(&sp, 2);
	push(&sp, 3);
	printf("%d\n", pop(&sp));
	printf("%d\n", pop(&sp));
	printf("%d\n", pop(&sp));
	free(sp);
	return 0;
}

c로 나타내면 위와 같다. 동적 메모리 할당을 통해 스택을 생성하였는데, 일반적인 정적 할당 방법을 사용하려면 

int main(void) {
	StackType sp;
	init_stack(&sp);
	push(&sp, 1);
	push(&sp, 2);
	push(&sp, 3);
	printf("%d\n", pop(&sp));
	printf("%d\n", pop(&sp));
	printf("%d\n", pop(&sp));
	return 0;
}

이렇게 사용하면 된다. 메인함수에서 처음 할당할때 정적으로하느냐 동적으로 하느냐의 차이이다.

 

'DSA' 카테고리의 다른 글

스택(Stack) 활용 예제 2  (0) 2024.08.21
스택(Stack) 활용 예제 1  (0) 2024.08.21
순환 (하노이 탑)  (0) 2024.07.28
퀵 정렬 예제  (0) 2024.07.25
덱 (Deque)  (0) 2024.07.25