컴퓨터공학 💻 도서관📚
큐 자료구조 c언어 본문
연결리스트로 구현한 큐 자료구조
#include <stdio.h>
#include <stdlib.h>
// 노드 구조체 정의
typedef struct Node {
int data;
struct Node* next;
} Node;
// 큐 구조체 정의
typedef struct Queue {
Node* front;
Node* rear;
} Queue;
// 큐 초기화
void init(Queue* q) {
q->front = NULL;
q->rear = NULL;
}
// 큐가 비었는지 확인
int isEmpty(Queue* q) {
return q->front == NULL;
}
// 데이터 삽입 (enqueue)
void enqueue(Queue* q, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("메모리 할당 실패!\n");
return;
}
newNode->data = value;
newNode->next = NULL;
if (isEmpty(q)) {
q->front = newNode;
q->rear = newNode;
} else {
q->rear->next = newNode;
q->rear = newNode;
}
}
// 데이터 제거 (dequeue)
int dequeue(Queue* q) {
if (isEmpty(q)) {
printf("큐가 비어있습니다!\n");
return -1;
}
Node* temp = q->front;
int value = temp->data;
q->front = q->front->next;
if (q->front == NULL) {
q->rear = NULL;
}
free(temp);
return value;
}
// 맨 앞 값 확인 (삭제하지 않음)
int peek(Queue* q) {
if (isEmpty(q)) {
printf("큐가 비어있습니다!\n");
return -1;
}
return q->front->data;
}
// 전체 큐 메모리 해제
void clear(Queue* q) {
while (!isEmpty(q)) {
dequeue(q);
}
}
// 테스트용 main 함수
int main() {
Queue q;
init(&q);
enqueue(&q, 10);
enqueue(&q, 20);
enqueue(&q, 30);
printf("Peek: %d\n", peek(&q)); // 10
printf("Dequeue: %d\n", dequeue(&q)); // 10
printf("Dequeue: %d\n", dequeue(&q)); // 20
printf("Dequeue: %d\n", dequeue(&q)); // 30
printf("Dequeue: %d\n", dequeue(&q)); // 큐가 비어있습니다!
clear(&q); // 메모리 해제
return 0;
}
배열로 구현한 큐 자료구조
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int front;
int rear;
} Queue;
// 큐 초기화
void init(Queue* q) {
q->front = 0;
q->rear = 0;
}
// 큐가 비었는지 확인
int isEmpty(Queue* q) {
return q->front == q->rear;
}
// 큐가 가득 찼는지 확인
int isFull(Queue* q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
// 데이터 삽입
void enqueue(Queue* q, int value) {
if (isFull(q)) {
printf("큐가 가득 찼습니다!\n");
return;
}
q->data[q->rear] = value;
q->rear = (q->rear + 1) % MAX_SIZE;
}
// 데이터 제거
int dequeue(Queue* q) {
if (isEmpty(q)) {
printf("큐가 비어있습니다!\n");
return -1;
}
int value = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return value;
}
// 맨 앞 값 확인 (삭제하지 않음)
int peek(Queue* q) {
if (isEmpty(q)) {
printf("큐가 비어있습니다!\n");
return -1;
}
return q->data[q->front];
}
// 테스트 main 함수
int main() {
Queue q;
init(&q);
enqueue(&q, 10);
enqueue(&q, 20);
enqueue(&q, 30);
printf("Peek: %d\n", peek(&q)); // 10
printf("Dequeue: %d\n", dequeue(&q)); // 10
printf("Dequeue: %d\n", dequeue(&q)); // 20
printf("Dequeue: %d\n", dequeue(&q)); // 30
printf("Dequeue: %d\n", dequeue(&q)); // 큐가 비어있습니다!
return 0;
}
'💯🌊자료구조&알고리즘 > C언어' 카테고리의 다른 글
트리 자료구조 c언어 ( 이진 트리 ) (0) | 2025.04.21 |
---|---|
스택 자료구조 c언어 (0) | 2025.04.21 |
집합 자료구조 C언어 (0) | 2025.04.13 |
원형연결리스트 C언어 (0) | 2025.04.08 |
이중연결리스트 (C언어) (0) | 2025.04.04 |
Comments