ListDequeue -(Quize 1)

์ฑ„์žฌํ—Œยท2022๋…„ 7์›” 21์ผ
0
post-thumbnail

๐ŸŽˆ 1. ๋ฌธ์ œ ์„ค๋ช…-Version #1

๐ŸŽ† 2. ์†Œ์Šค์ฝ”๋“œ + ์ฃผ์„

๐Ÿ”‘ Visual Studio ๋ฒ„์ „

#include<malloc.h>
  #include<stdlib.h>
   #define TRUE 1;
   #define FALSE 0  // ์ฐธ/๊ฑฐ์ง“์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ์œ„ํ•œ ์ •์˜
   typedef struct _node Node; //๊ตฌ์กฐ์ฒด Node, Queue์ƒ์„ฑ
   struct _node
   {
     int data;
    Node *next;
   };

   typedef struct _queue {
     Node *head;  //Queue์˜ ์—ญํ• ์€ ๋…ธ๋“œ์˜ ๋จธ๋ฆฌ์™€ ๊ผฌ๋ฆฌ๋ฅผ ์—ฐ๊ฒฐ
     Node *tail;
   }Queue;

   typedef int element;

   element createQueue(Queue * q) //๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น malloc ์‚ฌ์šฉ
   {
     if (q == NULL) {  //q์— ์•„๋ฌด๊ฒƒ๋„ ์—†์„๋•Œ 0์œผ๋กœ ๋ฆฌํ„ด
      return FALSE ;
    }

     q->head = (Node*)calloc(1, sizeof(Node));// Node์˜ ์‚ฌ์ด์ฆˆ ๋งŒํผ 1๊ฐœ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ• ๋‹น
     if (q->head == NULL) {
      return FALSE;
    }
     q->tail = (Node*)calloc(1, sizeof(Node)); // ์œ„์˜ ๋‚ด์šฉ๊ณผ ๋™์ผ
     if (q->tail == NULL) { //q์˜ ๊ผฌ๋ฆฌ๊ฐ€ NULL์ด๋ฉด q->head๋ฅผ freeํ›„ 0์œผ๋กœ ๋ฆฌํ„ด
       free(q->head);
       return FALSE;
     }

     else {
      q->head->next = q->tail; //ํ• ๋‹น์ด ๋˜์–ด์žˆ๋‹ค๋ฉด  q์˜ ํ—ค๋“œ์˜ ๋„ฅ์ŠคํŠธ๋ฅผ q์˜ ๊ผฌ๋ฆฌ์— ์—ฐ๊ฒฐํ•˜์—ฌ ํ˜•ํƒœ ๊ตฌํ˜„
      q->tail->next = q->tail; //๋˜ํ•œ q์˜ ๊ผฌ๋ฆฌ์˜ ๋„ฅ์ŠคํŠธ์— q์˜ ๊ผฌ๋ฆฌ๋ฅผ ์—ฐ๊ฒฐํ•œ ๋’ค 1๋กœ ๋ฆฌํ„ด
       return TRUE;
     }
  }

   element isQueueEmpty(const Queue *q)//๊ตฌ์ดˆ์ฒด ์•ˆ์ด ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ์ƒํƒœ์ธ์ง€ ํ™•์ธ
   {
    if (q == NULL) {
      return FALSE;
   }

      if (q->head->next == q->tail) {
        return TRUE;
     }
     else {
      return FALSE;
    }
   }


   element enqueue(Queue * q, int enqueData)  //๋ฐ์ดํ„ฐ ๋„ฃ๊ธฐ
   {

     Node*cur;

    if (q == NULL) {
      return FALSE;
     }

     Node* np = (Node*)(calloc(1, sizeof (Node)));
    if (np == NULL) {
       return FALSE;
     }

     cur = q->head;
     while (cur->next != q->tail)
      cur = cur->next;

       cur->next = np;
     np->next = q->tail;
       np->data = enqueData;

      return TRUE;
   }

  element dequeue(Queue * q, int * dequeData) //๋ฐ์ดํ„ฐ ์ถœ๋ ฅ ํ›„ ์‚ญ์ œ
   {
      Node*cur;

     if (q == NULL) { //๊ตฌ์ดˆ์ฒด๊ฐ€ NULL์ด๋ฉด ๋น„์–ด์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค
       printf("EMPTY\n");
       return FALSE;
     }
   if (isQueueEmpty(q)) {
        return FALSE;
    }

     else {
      *dequeData = q->head->next->data;
       cur = q->head->next;
      q->head->next = q->head->next->next;
      free(cur);
     return TRUE;
   }
 }

  void printQueue(const Queue * q)
  {
    Node*curp;
    int res;
    if (q == NULL) {
return;
}
printf("ํ :");
         curp = q->head->next;
while (curp != q->tail) {
printf(" %d - ", curp->data);
curp = curp->next;
}
res=isQueueEmpty(q);//๋น„์–ด์žˆ์Œ์„ ํ™•์ธํ•œ ํ›„ ๋ฆฌํ„ด๊ฐ’์— ๋”ฐ๋ผ NULL์ถœ๋ ฅ
if(res==1){
printf("NULL");
}


printf("\n\n");


}


void destroyQueue(Queue * q)// ๋‚จ์•„์žˆ๋Š” ๋ฐ์ดํ„ฐ free
{
Node*curp;
if (q == NULL) {
return;
}
curp = q->head->next;
while (curp != q->tail) {
q->head->next = q->head->next->next;
free(curp);
curp = q->head->next;
}

free(q->head);
free(q->tail);
q->head = q->tail = NULL;
printf("BYE\n");
}


void input(Queue *qp)// enqueue ๋ฐ์ดํ„ฐ ์ž…๋ ฅ
{
int enqueData;
if (scanf("%d", &enqueData) != 1) {


}
if (!enqueue(qp, enqueData))
printf("enqueue ์‹คํŒจ!!\n");
printQueue(qp);

}


void myDelete(Queue *qp)//dequeue ๋ฐ์ดํ„ฐ ์ž…๋ ฅ
{
int i;
int cnt;
int dequeData;
int res;
if(isQueueEmpty(qp)){// ๊ตฌ์กฐ์ฒด ์•ˆ์ด NULL์ผ๋•Œ EMPTY์ถœ๋ ฅ
printf("EMPTY\n");
printQueue(qp);//NULL ์ถœ๋ ฅ
return;//๋ฉ”์ธ์œผ๋กœ ๋Œ์•„๊ฐ‘
}
scanf("%d", &dequeData);
res = dequeue(qp, &dequeData);
if (res == 1) //NULL์ด ์•„ใ…ฃ๋ฉด ์ถœ๋ ฅ์œผ๋กœ ์ด๋™/๋ฐ์ดํ„ฐ ์‚ญ์ œ
{
}
/*else
printf("Empty\n");*/

printQueue(qp);

}

int menu(const char **menuList, int menuCnt) // ๋ฌด์Šจ ์˜ต์…˜์ด ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ์ƒํƒœ
{
int i;
int menuNum = 0;
int res;
for (i = 0; i < menuCnt; i++)
{
printf("%d. %s\n", i + 1, menuList[i]);
}
while (menuNum<1 || menuNum>menuCnt)
{
printf("์ž…๋ ฅ:");
res = scanf("%d", &menuNum);
if (res != 1)
{

continue;
}
}
return menuNum;
}

int main()
{
Queue q;
const char *menuList[] = { "Enqueue", "Dequeue", "์ข…๋ฃŒ" };
int menuCnt;
int menuNum;

createQueue(&q);

menuCnt = sizeof(menuList) / sizeof(menuList[0]);
while (1)
{
menuNum = menu(menuList, menuCnt);
if (menuNum == menuCnt)
{
break;
}
switch (menuNum)
{
case 1:
{
input(&q);
break;
}
case 2:
{
myDelete(&q);
break;
}
}
}
    destroyQueue(&q);
    return 0;
 }

๐Ÿ’ก -Linux ๋ฒ„์ „

๐ŸŽ‰ 3.์‹คํ–‰ ํ™”๋ฉด ์บก์ณ

โœจ 4. ๋А๋‚Œ์ 

์ด๋ฒˆ ์ž๋ฃŒ๊ตฌ์กฐ list๋ฅผ ํ™œ์šฉํ•œ Queue๊ตฌํ˜„ ํ€ด์ฆˆ๋ฅผ ํ’€์–ด๋ณด๋ฉด์„œ ๊ธฐ์กด์— ์ˆ˜์—…์‹œ๊ฐ„์— ๋ฐฐ์› ๋˜ ๋‹จ์ผ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์›๋ฆฌ์™€ FIFO ๊ตฌ์กฐ๋ฅผ ์ง€๋‹Œ Queue์˜ ์›๋ฆฌ๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜๋“ค์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์˜€๊ณ , ์ฃผ์–ด์ง„ ์ถœ๋ ฅ๊ฐ’์˜ ๋ณด๊ธฐ์™€ ์ž…๋ ฅ์„ ๋™์ผํ•˜๊ฒŒ ํ•˜๊ธฐ์œ„ํ•ด ๋ฉ”์ธ ํ•จ์ˆ˜๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค. ์ด๋ฒˆ ํ€ด์ฆˆ๋Š” ์ด์ „ ํ€ด์ฆˆ์— ๋น„ํ•ด ์ฃผ์–ด์ง„ ์ถœ๋ ฅ๊ณผ ๊ฐ™๊ฒŒ ๋ฉ”์ธํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š”๊ฒƒ๋„ ๋‚œ์ด๋„๊ฐ€ ์žˆ์—ˆ๊ณ , ํ€ด์ฆˆ๋ฅผ ํ’€๋ฉด์„œ ๋งˆ์ง€๋ง‰ Dequeueํ• ๋•Œ์˜ ๋ฌธ์ œ์ ๋„ ๋งŽ์ด ์ƒ๊ฒผ๋‹ค. ํ•˜์ง€๋งŒ ๋๊นŒ์ง€ ํฌ๊ธฐํ•˜์ง€ ์•Š๊ณ  Queue๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ช‡๊ฐ€์ง€ ํ•จ์ˆ˜๋“ค์„ ์ˆ˜์ •ํ•˜๊ณ , ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ ‘๊ทผํ•˜์—ฌ ๋๋‚ด ์ด ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ƒˆ๋‹ค. ๋‚˜๋Š” ์ด๋ฒˆ ํ€ด์ฆˆ๋ฅผ ํ’€์–ด๋ณด๊ณ  ์ด๋ฒˆ ํ•™๊ธฐ์˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํ€ด์ฆˆ๋ผ๊ณ  ์ƒ๊ฐํ•˜์˜€๊ณ , ์ด๋ ‡๊ฒŒ ํ€ด์ฆˆ๋ฅผ ํ’€์–ด๋ด„์œผ๋กœ์จ ์ดˆ๋ฐ˜ ํ•™๊ธฐ๋•Œ์˜ ์‹ค๋ ฅ์— ๋น„ํ•ด ๋งŽ์€ ๋ฐœ์ „์ด ์žˆ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์˜€์œผ๋ฉฐ, ์•ž์œผ๋กœ ์ด์™ธ์— ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ด„์œผ๋กœ์จ ์‹ค๋ ฅ์„ ๋” ํ‚ค์›Œ์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ•˜๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€