일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 알고리즘
- @Component
- 시스템호출
- C언어
- 카카오
- 가상면접사례로배우는대규모시스템설계기초
- 코딩테스트
- 프로그래머스
- C++
- thymeleaf
- 컴포넌트스캔
- nestJS
- 코테
- Nodejs
- nestjs typeorm
- 파이썬
- TypeORM
- python
- OpenCV
- AWS
- nestjs auth
- 카카오 알고리즘
- git
- Spring
- 카카오 코테
- 구조체배열
- spring boot
- 스프링
- @Autowired
- 해시
Archives
- Today
- Total
공부 기록장 💻
[자료구조] 원형 큐 (Circular Queue) 응용 - 오름차순으로 큐에 데이터 삽입하기 본문
# CS Study/DS Algorithm
[자료구조] 원형 큐 (Circular Queue) 응용 - 오름차순으로 큐에 데이터 삽입하기
dream_for 2021. 6. 7. 14:27
data.txt
30
50
10
40
20
// 원형큐 응용 - 큐의 데이터를 오름차순으로 정렬하고 출력하기
// 숫자가 낮은 순서대로 저장
#include <stdio.h>
#define MAX_QUEUE_SIZE 100
typedef struct {
int nPriority; // 큐의 요소 값 (낮은 순대로 저장하기 위함)
}QueueObject;
QueueObject queue[MAX_QUEUE_SIZE]; // 원형 큐를 배열리스트로 선언
int front, rear;
// initialize
void init_queue() { front = rear = 0; }
// isEmpty
int isEmpty() { return(front == rear); }
// isFull
int isFull() { return ((rear + 1) % MAX_QUEUE_SIZE == front); }
// queue에 priority에 따라서 add하는 함수
void addq(int item, int nItems) // item: 추가하려는 priority, nItems: 데이터 개수
{
int i;
if (isFull())printf("queue is full \n");
// 기존에 있는 큐에 있는 데이터와 수를 비교하여 어디에 넣을지 결정함
if (nItems == 0)
queue[nItems++].nPriority = item; // 0번째 인덱스에 추가
else {
// 루프를 돌며 내 위치를 찾는다 (내가 nPriority보다 작다면 삽입)
// 뒤에서부터 반복문 돌며 비교
for (i = nItems - 1;i >= 0;i--) {
if (item < queue[i].nPriority) // 새로 들어온 item 보다 queue 데이터가 더 큰 경우에
queue[i + 1].nPriority = queue[i].nPriority; // 하나 뒤로 밀어줌
else
break;
}
queue[i + 1].nPriority = item;
}
rear = (rear + 1) % MAX_QUEUE_SIZE;
}
QueueObject deleteq() {
if (isEmpty()) {
printf("queue is empty \n");
return;
}
else {
front = (front + 1) % MAX_QUEUE_SIZE;
return queue[front];
}
}
int main() {
FILE* fp;
int temp;
QueueObject sstemp; // 임시변수
int i, nCount; // 파일의 데이터 개수 cnt
init_queue();
nCount = 1;
fp = fopen("data.txt", "rt");
while (!feof(fp)) {
fscanf(fp, "%d", &temp);
addq(temp, nCount);
nCount++;
}
for (i = 0;i < nCount - 1;i++) { // 1부터 카운트되었으므로 (nCount-1)까지
sstemp = deleteq();
printf("%d -> ", sstemp.nPriority);
}
printf("\n");
fclose(fp);
return 0;
}
728x90
반응형
'# CS Study > DS Algorithm' 카테고리의 다른 글
Comments