알고리즘 - Queue

Mokwon Univ 2008. 8. 16. 16:16
/*****************************************************************************
* *
* ------------------------------- queue.c -------------------------------- *
* *
*****************************************************************************/

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include "list.h"
#include "queue.h"

int select(void);
void search(void *data);
void print();

List *queue;

void main()
{
queue=(List *)malloc(sizeof(List));
queue_init(queue,NULL);
select();
return;
}

int select(void)
{
void *add;
int input;

while(1)
{
printf("n");
printf(" ┏━━━ queue menu v1.0 ━━━━┓ n");
printf(" ┃ 1 -> queue init ┃n");
printf(" ┃ 2 -> queue insert ┃n");
printf(" ┃ 3 -> queue remove ┃n");
printf(" ┃ 4 -> queue search ┃n");
printf(" ┃ 5 -> queue print ┃n");
printf(" ┃ 0 -> Exit ┃n");
printf(" ┣━━━━━━━━━━━━━━━━┫n");
printf(" ┃select number ┃n");
printf(" ┗━━━━━━━━━━━━━━━━┛n");
printf(" ==> ");
scanf("%d",&input);

switch(input)
{
case 1:
queue_destroy(queue);
queue_init(queue,NULL);
system("cls");
break;
case 2:
system("cls");
printf(" Input data -> ");
scanf("%d",&add);
queue_enqueue(queue,add);
printf(" Input Success n");
break;
case 3:
system("cls");
queue_dequeue(queue,&(queue->tail));
printf(" Data Remove Success n");
break;
case 4:
system("cls");
printf(" Input Data --> ");
scanf("%d",&add);
search(add);
break;
case 5:
system("cls");
print();
break;
case 0:
queue_destroy(queue);
return 0;
default:
system("cls");
printf(" You select wrong number Try to again selectnn");
break;
}
}
}


void print()
{
ListElmt *add;
add=(ListElmt *)malloc(sizeof(ListElmt));
add=queue->head;
//printf(" queue");
printf("nn");
printf("t HEAD n");
while(add != NULL)
{
printf("t┣━━ %d ━━┫n",add->data);
add = list_next(add);
}
printf("t┗━━━━━━┛n");
printf("t TAIL nn");
return;
}




void search(void *data)
{
ListElmt *add;
add=(ListElmt *)malloc(sizeof(ListElmt));
add=queue->head;

if(add==NULL)
{
printf(" No data n");
return;
}

for(add=queue->head;add!=NULL;add=list_next(add))
{
if(add->data==data)
{
printf(" Search Ok n");
return;
}
}
printf(" Not Search Data n");
return;
}





/*****************************************************************************
* *
* ----------------------------- queue_enqueue ---------------------------- *
* *
*****************************************************************************/

int queue_enqueue(Queue *queue, const void *data) {

/*****************************************************************************
* *
* Enqueue the data. *
* *
*****************************************************************************/

return list_ins_next(queue, list_tail(queue), data);

}

/*****************************************************************************
* *
* ----------------------------- queue_dequeue ---------------------------- *
* *
*****************************************************************************/

int queue_dequeue(Queue *queue, void **data) {

/*****************************************************************************
* *
* Dequeue the data. *
* *
*****************************************************************************/

return list_rem_next(queue, NULL, data);

}













/*****************************************************************************
* *
* ------------------------------- queue.h -------------------------------- *
* *
*****************************************************************************/

#ifndef QUEUE_H
#define QUEUE_H

#include <stdlib.h>

#include "list.h"

/*****************************************************************************
* *
* Implement queues as linked lists. *
* *
*****************************************************************************/

typedef List Queue;

/*****************************************************************************
* *
* --------------------------- Public Interface --------------------------- *
* *
*****************************************************************************/

#define queue_init list_init

#define queue_destroy list_destroy

int queue_enqueue(Queue *queue, const void *data);

int queue_dequeue(Queue *queue, void **data);

#define queue_peek(queue) ((queue)->head == NULL ? NULL : (queue)->head->data)

#define queue_size list_size

#endif
 
출처 - C로 구현한 알고리즘, 한빛미디어
Posted by 용학도리
,