반응형
#include <stdio.h>
#include <stdlib.h>
typedef struct _NODE // 새로운 타입 선언
{
int Data;
struct _NODE *Next;
} NODE;
NODE *Front, *Rear; // Front = Get()함수를 쓸때 데이터 가져오기, Rear은 Put() 함수를 쓸때 데이터 저장하기 위해 사용
NODE *ptrNode;
void InitializeQueue(void);
void Put(int);
void DisplayQueue(void);
int Get(void);
void main()
{
int ret;
InitializeQueue();
printf("Put() 함수를 호출해 보죠!\n");
Put(1);
Put(3);
Put(10);
Put(20);
Put(12);
printf("다섯 번의 Put() 호출 후 결과 : ");
DisplayQueue();
ret = Get();
ret = Get();
ret = Get();
printf("\n세 번의 Get() 호출 후 결과 : ");
DisplayQueue();
ret = Get();
ret = Get();
printf("\n두 번의 Get() 호출 후 결과 : ");
DisplayQueue();
}
void InitializeQueue(void)
{
Front = (NODE *)malloc(sizeof(NODE));
Rear = (NODE *)malloc(sizeof(NODE));
Front -> Next = Rear;
Rear -> Next = Rear; // 자기 자신을 다시 가리킨다.
}
void Put(int num) // Rear에서 자료를 삽입한다.
{
ptrNode = (NODE *)malloc(sizeof(NODE));
ptrNode -> Data = num;
if(Front -> Next ==Rear)
{
Front->Next=ptrNode;
ptrNode->Next=Rear;
Rear->Next=ptrNode;
}
else // Front와 Rear 사이에 ptrNode가 계속 삽입된다.
{ // 즉, Rear 바로 전 링크가 새로운 값을 저장한 노드로 계속 변경 된다.
Rear->Next->Next=ptrNode;
ptrNode->Next=Rear;
Rear->Next=ptrNode;
}
}
int Get(void) // Front에서 자료를 뺀다.
{
int ret;
NODE *deleteNode;
printf("\n");
if(Front->Next==Rear)
printf("Queue Empty\n");
else
{
deleteNode = Front ->Next;
Front->Next=deleteNode->Next;
ret=deleteNode ->Data;
printf("get() : %d\n", ret);
free(deleteNode); // malloc를 사용해 동적 할당을 했으니 꼭 free 시켜서 동적할당을 해제해야한다.
}
return ret;
}
void DisplayQueue(void)
{
NODE *ptrTemp;
if(Front->Next != Rear)
{
for(ptrTemp = Front ->Next; ptrTemp ->Next !=Rear; ptrTemp=ptrTemp->Next)
printf("%d -> ", ptrTemp->Data);
printf("%d\n", ptrTemp->Data);
}
else if(Front ->Next ==Rear)
printf("Queue Empty\n");
}
반응형
'Programings > Data Structs' 카테고리의 다른 글
RVector (0) | 2015.10.20 |
---|---|
[Data Struct] 스택 (Queue) - 배열을 이용한 스택 (0) | 2010.08.17 |
[Data Struct] 스택 (Stack) - 링크드 리스트를 이용한 스택 (0) | 2010.08.12 |
[Data Struct] 이중 링크드 리스트 (0) | 2010.08.12 |
[Data Struct] 단순 링크드 리스트 (0) | 2010.08.12 |