728x90
반응형
Stack & Queue (Using an Array)
Stack
definition
- LIFO(Last-In-First-Out) 구조
- 나중에 들어간 데이터가 먼저 나오는 구조의 리스트 자료구조
Implementation
- 배열을 이용하는 방법(global or local)
- non-circular buffer
- circular buffer
- 연결 리스트를 이용하는 방법
Using an Array: non-cicular buffer
1차원 배열
(datatype) stack[stack_size]
ex) char stack[100]
variable: top - 0으로 초기화(empty stack)
삽입할 때마다 top++
int main(void) { int stack[5]; int top = 0; // insert stack[top] = 2; top++; // insert stack[top] = 7; top++; // insert stack[top] = 3; top++; // insert stack[top] = 1; top++; // insert stack[top] = 5; top++; // stack is full(stack_size <= top) // If inserting, then overflow return 0; }
Using an Array: cicular buffer
top >= stack_size면 top = 0으로
-> 기존 데이터가 덮어씌워지는 문제 발생
int main(void)
{
int stack[5];
int top = 0;
// insert
stack[top] = 2;
top++;
// insert
stack[top] = 7;
top++;
// insert
stack[top] = 3;
top++;
// insert
stack[top] = 1;
top++;
// insert
stack[top] = 5;
top++;
// stack is full(stack_size <= top)
top = 0;
// insert
stack[top] = 8;
return 0;
}
Queue
definition
- FIFO(First-In-First-Out 구조)
- 먼저 들어간 데이터가 먼저 나오는 구조의 리스트 자료구조
Implementation
- 배열을 이용하는 방법(global or local)
- non-circular buffer
- circular buffer
- 연결 리스트를 이용하는 방법
Using an Array: non-cicular buffer
- 1차원 배열
- (datatype) queue[queue_size]
- ex) char queue[100]
- variable: front, rear = 0으로 초기화
- 삽입할 때마다 reat++
- 삭제할 때마다 front++
int main(void)
{
int queue[3];
int front = 0;
int rear = 0;
// insert
queue[rear] = 2;
rear++;
// insert
queue[rear] = 7;
rear++;
// insert
queue[rear] = 3;
rear++;
// queue is full(queue_size <= rear)
// If inserting, then overflow
// delete
int popData;
popData = queue[front];
front++;
// delete
popData = queue[front];
front++;
// Delete
popData = queue[front];
front++;
// 더 이상 큐를 사용하지 못하는 상태
// queue_size <= rear = front
// insert도 delete도 불가능
return 0;
}
Using an Array: cicular buffer
- front != 0이고 front = rear인 상태에서 insert할 때, rear = 0으로
- front == queue_size이고 rear != 0인 상태에서 delete할 때, front = 0으로
-> 기존 데이터가 덮어씌워지는 문제 발생
int main(void)
{
int queue[3];
int front = 0;
int rear = 0;
// insert
queue[rear] = 2;
rear++;
// insert
queue[rear] = 7;
rear++;
// insert
queue[rear] = 3;
rear++;
// queue is full(queue_size <= rear)
// If inserting, then overflow
// delete
int popData;
popData = queue[front];
front++;
// delete
popData = queue[front];
front++;
// Delete
popData = queue[front];
front++;
// 더 이상 큐를 사용하지 못하는 상태
// insert
rear = 0;
queue[rear] = 1;
rear++;
// delete
front = 0;
popData = queue[front];
front++;
return 0;
}
728x90
반응형
'자료구조' 카테고리의 다른 글
[자료구조] 그래프 (0) | 2022.05.29 |
---|---|
[자료구조]트리 (0) | 2022.05.29 |
[자료구조]Red-Black 트리(레드블랙트리) (0) | 2022.05.26 |
[자료구조] 해싱(hashing) (0) | 2022.05.23 |
[자료구조] 정렬 (0) | 2022.05.19 |