/*****************************************************************************
* *
* ------------------------------- 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
* *
* ------------------------------- 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로 구현한 알고리즘, 한빛미디어