자료구조(13)_Queue

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아이티뱅크학원 (자료구조 수업)

0%