자료구조2(큐, 덱)
2024. 1. 4. 15:53ㆍComputer/자료구조, 알고리즘
큐
큐는 한쪽 끝을 rear로 정하여 삽입 작업만 이루어지고 반대쪽 끝은 front로 정해 삭제 작업만 이루어진다.
- 순차 자료구조
초기 상태 : front = rear = -1 , 공백 상태 : front = rear , 포화 상태 : rear = n-1
deQueue(Q)
front <- front + 1;
return Q[front];
- 연결 자료구조
//c언어 순차 자료구조
typedef char element;
typedef struct QueueType{
element queue[4];
int front, rear;
}QueueType;
void enQueue(QueueType *Q, element item){
Q->rear++;
Q->queue[Q->rear] = item;
}
element deQueue(QueueType *Q){
Q->front++;
return Q->queue[Q->front];
}
더보기
Queue에서 deQueue를 할때 배열에 있는 요소를 삭제하는 것이 아니라 front위치만 변해서 Queue[4];인 경우 E는 삽입할 수 없는 개념을 모르고 구현하려고 해서 매우 헷갈렸다.
- 파이썬으로 구현
from collections import deque # queue 라이브러리를 이용하는 것보다 간단하다.
# 큐(Queue) 구현을 위해 collections 모듈에서 제공하는 deque 라이브러리 사용
queue = deque()
# 삽입(5) 삽입(4) 삭제() 삽입(5) 삭제()
queue.append(5)
queue.append(4)
queue.popleft()
queue.append(5)
queue.popleft()
print(queue)
queue.reverse()
print(queue)
# deque 객체를 리스트 자료형으로 변경하고자 한다면 list() 메서드를 이용 list(queue)
원형 큐
- 순차 자료구조
- 연결 자료구조
연결 큐의 초기 상태(공백 큐)는 front와 rear를 NULL 포인터로 설정하여 표현한다.
typedef char element;
typedef struct QNode{
element data;
struct QNode* link;
}QNode;
typedef struct{
QNode* front, * rear;
}LQueueType;
void enLQueue(LQueueType* LQ, element item){// 연결 큐의 rear에 원소를 삽입하는 연산
QNode* newNode = (QNode*)malloc(sizeof(QNode));
newNode->data = item;
newNode->link = NULL;
if(LQ->front == NULL){
LQ->front = newNode;
LQ->rear = newNode;
}else{
LQ->rear->link = newNode;
LQ->rear = newNode;
}
}
element deLQueue(LQueueType* LQ){ // 연결 큐에서 원소를 삭제하고 반환하는 연산
QNode* old = LQ->front;
element item;
if(isLQEmpty(LQ)) return;
else{
item = old->data;
LQ->front=LQ->front->link
if(LQ->front == NULL)
LQ->rear = NULL;
free(old);
return item;
}
}
덱
Deque(Double - Ended Queue)은 front, rear 에서 삽입 삭제가 모두 가능한 큐
from collections import deque
deque=deque()
print("현재 데크 :",deque)
deque.append(1) #오른쪽에 1 추가
print("현재 데크 :",deque)
deque.appendleft(2) #왼쪽에 2 추가
print("현재 데크 :",deque)
deque.popleft() #첫 번째 원소 제거
print("현재 데크 :",deque)
deque.pop() #끝 원소 제거
print("현재 데크 :",deque)
'Computer > 자료구조, 알고리즘' 카테고리의 다른 글
이진 트리 (0) | 2023.12.01 |
---|---|
정렬 (0) | 2023.09.15 |
구현 유형(완전 탐색, 시뮬레이션) (0) | 2023.09.12 |
그래프 (0) | 2023.06.14 |
탐색(search) (0) | 2023.06.02 |