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 |