#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct nodetype{
int data;
}node;
typedef struct Quetype{
int max;
int count;
int rear;
int front;
node *ArrayQue;
}Que;
//자료형태 구조체 및 Que구조체 생성
Que *makeQue(int max){
Que *returnQue;
returnQue = (Que *)malloc(sizeof(Que));
if ( returnQue != NULL ){
returnQue -> max = max; // 최대값 지정
returnQue -> count = 0; // 현재값 지정
returnQue -> rear = -1; // 현재 꼬리 위치지정
returnQue -> front = -1; // 현재 머리 위치 지정
returnQue -> ArrayQue = (node *)malloc(sizeof(node)*max);
if ( returnQue -> ArrayQue != NULL ){
memset(returnQue->ArrayQue,0,sizeof(node)*max); // 자료 배열 생성
}else{
printf("Memory ArrayQue!!\n");
return 0;
}
}else{
printf("Memory returnQue!!\n");
return 0;
}
return returnQue;
}
void enQue(Que *p,node data){
if ( p -> count == p -> max ){
printf("This Que is Full!!\n");
return ;
}else{
p -> rear = (p -> rear + 1) % p -> max;
// 원형 배열을 위한 rear 계산
// 원형이 아닐시에는 rear++로 끝!
p -> ArrayQue[p -> rear] = data;
p -> count++;
}
}
void deQue(Que *p){
if ( p -> count <= 0 ){
printf("This is Empty!!\n");
return;
}else{
p -> front = ( p -> front + 1 ) % p -> max;
// 원형 배열을 위한 front 계산
// 원형이 아닐시에는 front++로 끝!!
p -> ArrayQue[p->front].data = NULL;
p -> count--;
}
}
void display(Que *p){
int i;
for ( i = 0 ; i < p -> count ; i++ ){
printf("%d번째 값 : %d\n",i,p->ArrayQue[(p->front+i+1)%p->max]);
}
}
void main(){
Que *Q;
int max;
int select;
node data;
printf("Queue구조를 생성합니다. 최대 저장 개수 : ");
scanf("%d",&max);
Q = makeQue(max);
while(1){
printf("\n최대 %d개 저장 가능 / 현재 %d개 저장\n",Q->max,Q->count);
printf("1.저장\t2.삭제\t3.출력\t4.종료\n");
scanf("%d",&select);
switch(select){
case 1:
printf("Input data : ");
scanf("%d",&data.data);
enQue(Q,data);
break;
case 2:
deQue(Q);
break;
case 3:
display(Q);
break;
case 4:
return ;
default:
printf("Input Other number\n");
}
}
}
---------------------------------------------------------------------------------
스택처럼 별거 없습니다.
중요한 건 역시 색칠된 곳 정도??
내일은 덱구조와 함께 리스트로 구현한 큐를 보여드리겠습니다+ㅅ+
(참고로... Peek 함수가 stack처럼 존재하지만 딱히 구현은 하지 않았습니다)