프로그래밍[Univ]/데이터구조

[큐] 배열 큐 6/7

Cloud Travel 2011. 6. 7. 12:39

#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처럼 존재하지만 딱히 구현은 하지 않았습니다)