스택 (Stack)
LIFO (Last-in, First-out)
리스트 한 쪽에서만 삽입과 삭제를 수행하는 자료구조
처음 삽입된 데이터가 가장 나중에 제거된다.
int stack[MAX_SIZE];
int top = -1;
void push(int item){
if(top >= MAX_SIZE-1) stackFull();
stack[++top = item;
}
int pop(){
if(top == -1) return stackEmpty();
return stack[top--];
}
top | stack | ||
push(A) | 0 | ||
push(B) | 1 | ||
pop() | 0 | ||
pop() | -1 | ||
pop() | stackEmpty() | ||
push(C) | 0 |
큐 (queue)
FIFO (First-in, First-out)
리스트에서 먼저 삽입된 데이터가 가장 먼저 삭제되는 자료구조다.
- 삽입되는 곳 : rear
- 삭제되는 곳 : front
int rear = 0;
int front = 0;
int queue[MAX_SIZE];
void addq(int item){
rear = (rear+1);
if(front == rear) queueFull();
queue[rear] = item;
}
int deleteq(){
if(front == rear) return queueEmpty();
front = (front + 1) % MAX_SIZE;
return queue[front];
}
원형 큐
front | rear | |
addq(A) | 0 | 1 |
addq(B) | 0 | 2 |
addq(C) | 0 | 3 |
deleteq() | 1 | 3 |
deleteq() | 2 | 3 |
addq(D) | 2 | 4 |
addq(E) | 2 | 0 |
addq(F) | 2 | 1 |
addq(G) | 2 | 2 -> queueFull() * 하나 비었지만 Full! |
수식의 계산
int t;
int a=1;
int b[3] = {0, 1, 2};
t = &b[2];
if(*t + 2/a || a++ << 2 ^ !a && ++b[2] != 0);
- b[2] = 2
- a++ = 2
- *t = 2
- !a = 0
- ++b[2] = 3
- 2/a = 2
- (3) + (6) = 4
- (2) << 2 = 8
- (8) ^ (4) = 1
- (5) != 0 = True
- (9) && (10) = True
- (7) || (11) = True
후위 표기식의 연산
후위 표기식
연산자가 피연산자 뒤에 위치하는 표기법
후위 표기식 연산 방법
- 식을 괄호로 묶는다.
- 이항 연산자들을 모두 그들의 오른쪽 괄호와 대치
- 모든 괄호 삭제
ex1) 2+3*4
- (2 + (3 * 4))
- (2 (3 4 * +
- 2 3 4 * +
ex2) 8 / 2 - 3 + 4 * 2
- (((8 / 2 ) - 3 ) + ( 4 * 2 ) )
- ((( 8 2 / 3 - ( 4 2 * +
- 8 2 / 3 - 4 2 * +
stack | ||||
Token | [0] | [1] | [2] | top |
8 | 8 | 0 | ||
2 | 8 | 2 | 1 | |
/ | 4 | 0 | ||
3 | 4 | 3 | 1 | |
- | 1 | 0 | ||
4 | 1 | 4 | 1 | |
2 | 1 | 4 | 2 | 2 |
* | 1 | 8 | 1 | |
+ | 9 | 0 | ||
eos |
return 9;
중위표기에서 후위표기로의 반환
ex1) a + b * c
- (a + ( b * c ) )
- (a (b c * +
- a b c * +
stack | ||||||
Token | [0] | [1] | [2] | [3] | top | output |
a | eos | 0 | a | |||
+ | eos | + | 1 | a | ||
b | eos | + | 1 | a b | ||
* | eos | + | * | 2 | a b | |
c | eos | + | * | 2 | a b c | |
eos | eos | a b c * + |
ex2) a * ( b + c ) / d
stack | ||||||
Token | [0] | [1] | [2] | [3] | Top | output |
a | eos | 0 | a | |||
* | eos | * | 1 | a | ||
( | eos | * | ( | 1 | a | |
b | eos | * | ( | 1 | a b | |
+ | eos | * | ( | + | 2 | a b |
c | eos | * | ( | + | 2 | a b c |
) | eos | * | 1 | a b c + | ||
/ | eos | / | a b c + * | |||
d | eos | / | a b c + * d | |||
eos | eos | a b c + * d / |
'학교 > 자료구조' 카테고리의 다른 글
5. 이중 연결리스트 (0) | 2022.03.14 |
---|---|
4. 연결 리스트 (0) | 2022.03.14 |
2-2. 다항식 (0) | 2021.09.27 |
2-1. 배열과 구조 (0) | 2021.09.27 |
1. 기본개념 (0) | 2021.09.27 |