#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct nodetype{
int data;
struct nodetype *next;
}node;
typedef struct Quetype{
int count;
node * rear;
node * front;
}Que;
//자료형태 구조체 및 Que구조체 생성
//배열 큐와의 차이점 : ⓐ최대 저장개수가 불필요 / ⓑ rear/front가 포인터로써 쓰임
Que *makeQue(){
Que *returnQue;
returnQue = (Que *)malloc(sizeof(Que));
if ( returnQue != NULL ){
returnQue -> count = 0; // 현재저장된 개수 초기화
returnQue -> rear = NULL; // 현재 꼬리 위치 초기화
returnQue -> front = NULL; // 현재 머리 위치 초기화
}else{
printf("Memory returnQue!!\n");
return 0;
}
return returnQue;
}
void enQue(Que *p,node data){
node *temp = (node *)malloc(sizeof(node));
*temp = data;
if ( p -> count == 0 ){
p -> front = temp;
p -> rear = temp;
p -> count++;
}else{
p -> rear -> next = temp;
p -> rear = temp;
p -> count++;
}
//현재 저장되있는 자료의 개수가 0개인지 아닌지에 의해 알고리즘이 달라짐!!
}
void deQue(Que *p){
if ( p -> count <= 0 ){
printf("This is Empty!!\n");
return;
}else{
node *temp;
temp = p -> front;
p -> front = temp -> next;
free(temp);
if ( p -> count == 1 ){ //현재 자료개수가 하나밖에 없었던 상황이면 rear 값 초기화!!
p -> rear = NULL;
}
p -> count--;
}
}
void display(Que *p){
int i;
node *temp;
temp = p -> front;
for ( i = 0 ; i < p -> count ; i++ ){
printf("%d번째 값 : %d\n",i,temp -> data);
temp = temp -> next;
}
}
void main(){
Que *Q;
int select;
node data;
printf("Queue구조를 생성합니다.\n");
Q = makeQue();
while(1){
printf("현재 %d개 저장\n",Q->count);
printf("1.저장\t2.삭제\t3.출력\t4.종료\n");
scanf("%d",&select);
switch(select){
case 1:
printf("Input data : ");
scanf("%d",&data.data);
data.next = NULL;
enQue(Q,data);
break;
case 2:
deQue(Q);
break;
case 3:
display(Q);
break;
case 4:
return ;
default:
printf("Input Other number\n");
}
}
}
-------------------------------------------------------------------------------
주의깊게 보셧으면 하는데의 글씨색만 다르게 했습니다~
수고하세용~