queue
rear와 Front가 있다. Rear는 가장 나중에 들어온 데이터를 가리킨다. -> 데이터의 입력이 이루어짐. Front는 가장 먼저 들어온 데이터를 가리킨다.-> 데이터의 삭제가 이루어짐.
enqueue - > 삽입. dequeue -> 삭제
(원형 큐에서는 하나의 공간은 항상 비워두는데, 왜냐하면 포화상태와 공백상태를 구분하기 위해서다.)
#include<stdio.h>
#include<malloc.h>
#define SIZE 5
void enqueue(int * queue, int * front, int *rear, int data);
void dequeue(int * queue, int * front, int *rear);
int main(void)
{
int * queue = (int *)malloc(sizeof(int)*SIZE);
int front = 0, rear = 0;
dequeue(queue, &front, &rear);
enqueue(queue, &front, &rear, 10);
enqueue(queue, &front, &rear, 20);
enqueue(queue, &front, &rear, 30);
dequeue(queue, &front, &rear);
dequeue(queue, &front, &rear);
dequeue(queue, &front, &rear);
enqueue(queue, &front, &rear, 40);
enqueue(queue, &front, &rear, 50);
enqueue(queue, &front, &rear, 60);
return 0;
}
void enqueue(int * queue, int * front, int *rear, int data)
{
if (*rear == SIZE)
{
printf("full data!!!\n");
return;
}
queue[*rear] = data;
(*rear)++;
printf("data : %d\t rear : %d\t front : %d\n", queue[*rear - 1], *rear, *front);
}
void dequeue(int * queue, int * front, int *rear)
{
if (*rear == 0)
{
printf("no data!!!\n");
return;
}
(*front)++;
printf("deldata : %d\t rear : %d\t front : %d\n", queue[*front - 1], *rear, *front);
if (*front == *rear)
{
printf("no data!!!Queue reset!!\n");
*front = 0;
*rear = 0;
}
}
연결리스트로 구현한 큐
#include<stdio.h>
#include<malloc.h>
#define EMPTY 0
//구조체 형성
struct node
{
int data;
struct node * link;
};
typedef struct node Queue;
Queue * getNode();//노드 생성
void enqueue(Queue **front, Queue **rear, int data); //데이터 입력
void dequeue(Queue **front, Queue **rear);//데이터 삭제
void peek(Queue **front); //먼저 삭제될데이터
void Allpeek(Queue **front); //전체 데이터 출력
int main(void)
{
Queue *front = EMPTY, *rear = EMPTY;
enqueue(&front, &rear, 10);
enqueue(&front, &rear, 20);
enqueue(&front, &rear, 30);
enqueue(&front, &rear, 40);
Allpeek(&front);
peek(&front);
dequeue(&front, &rear);
peek(&front);
dequeue(&front, &rear);
peek(&front);
dequeue(&front, &rear);
peek(&front);
dequeue(&front, &rear);
peek(&front);
dequeue(&front, &rear);
peek(&front);
return 0;
}
Queue * getNode()
{
Queue * node = (Queue *)malloc(sizeof(Queue));
node->link = EMPTY;
return node;
}
void enqueue(Queue **front, Queue **rear, int data)
{
}
void dequeue(Queue **front, Queue **rear)
{
}
void peek(Queue **front)
{
}
void Allpeek(Queue **front)
{
if (*front == EMPTY)
{
printf("DATA 출력완료 \n");
return;
}
else
{
printf("%d -> ", (*front)->data);
Allpeek(&(*front)->link);
}
}
참고자료
kg아이티뱅크학원 (자료구조 수업)