본문 바로가기

프로그래밍 언어들/C

이중 포인터를 이용한 큐(queue)

#include <stdio.h>

#include <malloc.h>


#define _MSGONCALL_

#define _PRINTNODE_


typedef struct node

{

int data;

struct node* next;

}NODE;


void insertNode( NODE **, NODE **, int);

void deleteNode( NODE **);

void printNode( NODE *);

NODE* createNode( int);


int main( void)

{

NODE *front = NULL;

NODE *rear = NULL;


insertNode( &front, &rear, 10);

insertNode( &front, &rear, 20);

insertNode( &front, &rear, 30);


deleteNode( &front);

deleteNode( &front);

deleteNode( &front);


insertNode( &front, &rear, 50);

insertNode( &front, &rear, 90);


deleteNode( &front);

deleteNode( &front);

deleteNode( &front);

deleteNode( &front);


insertNode( &front, &rear, 40);

insertNode( &front, &rear, 130);


return 0;

}


NODE* createNode( int data)

{

NODE *temp = (NODE*)malloc(sizeof(NODE));


#ifdef _MSGONCALL_

printf("## createNode entered ##\n");

#endif


(*temp).next = NULL;

(*temp).data = data;


#ifdef _MSGONCALL_

printf("## createNode left ##\n");

#endif


return temp;

}


void insertNode( NODE **f, NODE **r, int data)

{

NODE *temp = createNode( data);


#ifdef _MSGONCALL_

printf("## insertNode entered ##\n");

#endif


if( *f == NULL)

{

*r = *f = temp;

}

else

{

(**r).next = temp;

*r = temp;

}


#ifdef _MSGONCALL_

printf("## insertNode left ##\n");

#endif


#ifdef _PRINTNODE_

printNode( *f);

#endif


}


void deleteNode( NODE **f)

{

NODE *temp = *f;


#ifdef _MSGONCALL_

printf("## deleteNode entered ##\n");

#endif


if( *f == NULL)

{

printf("Queue is emtpy!\n");


return;

}


*f = (**f).next;

free(temp);


#ifdef _MSGONCALL_

printf("## deleteNode left ##\n");

#endif


}


void printNode( NODE *f)

{

if( f)

{

printf("%d ->", (*f).data);


printNode( (*f).next);

}

else

{

printf("END\n");

}

}