메뉴 건너뛰기

창조도시 기록보관소

언어 자료구조 (2) - Queue[민프레스 강의정리]

2005.12.31 07:45

성령의분노 조회 수:150 추천:2

[ 특징 ]
스택과는 달리 입구와 출구가 서로 다르다.
먼저 들어온 데이터가 먼저 빼어낼 수 있다.
FIFO( FIRST-IN FIRST-OUT ) 구조라고 한다.
큐의 동작은 PUT과 GET동작이 있다.
자료를 빼내는 동작은 GET이라고 하며, 자료를 넣는 동작은 PUT이라고 한다.
PUT동작시에는 자료를 항상 뒤( REAR )부터 넣는다.
GET동작을 통해서 자료를 빼어 낼때는 앞( FRONT )로 빼어낸다.
윈도우 메시지 관리 등에 사용.

[ 개념도 ]



[ 예제소스 ]
#include
#include
int front, rear;
int queue[5];

void init_queue()
{
front = rear = 0;
}
초기화입니다.

int get()
{
int get_num;
if( front > 4 )
{
printf("언더플로우 발생 \n");
get_num = -1;
}else
get_num = queue[front++] ;
return get_num;
}

GET함수입니다. GET는 데이터를 삭제하는 함수가 아닙니다. 정보를 불러들이는 함수인데요. 처음 입력한 자료부터 하나씩 출력할 수 있지만, 이전 데이터가 삭제되는 것은 아닙니다 ( 삭제라도 별 상관은 없지만... )
큐배열의 FRONT( 앞, 말하자면 현재 출력할 데이터 위치입니다 )위치의 데이터를 리턴시키고 FRONT값을 하나 증가시킵니다. 그러니 다음번엔 변수 FRONT + 1 자리의 데이터가 GET되겠죠.

int put( int put_num )
{
int flag = 1;
if( rear > 4 )
{
printf("~~오버플로우 발생~~\n");
flag = 0;
}else 
queue[rear++] = put_num; 
return flag;
}

GET과 비슷하게 현재위치에 데이터를 입력하고 변수 REAR을 증가시킵니다.

void print_queue()
{
int i;
for( i = front ; i < rear ; i++ )
{
printf("%d", queue[i] );
}
putch('\n');
}

순서대로 출력을 합니다.

void main()
{

printf(" 배열을 이용한 큐 프로그램 입니다 \n");
int select_num;
int put_num;
int get_num;
init_queue();
while( 1 )
{

printf(" 1) put  2) get  3) data print 4) Quit! \n" );
printf(" 숫자를 선택해주세요 : ");  scanf("%d", &select_num );
if( select_num > 3 )      
break;
else{
 switch( select_num )
 {
  case 1 :
     printf("풋 숫자를 입력해주세요 => "); scanf("%d", &put_num );
     if( put( put_num ) )   
     printf("풋(put)을 실행 했습니다\n");
     break;
  case 2 :
       get_num = get();
    if( get_num > 0 )
     printf("겟(get)을 실행 했습니다, get한 값은 %d 입니다\n", get_num);
    break;
  case 3 :
    print_queue();
    break;
 }  
}
}
printf("프로그램을 종료합니다\n");
getch();
}

엔진입니다.



[예제프로그램]◁다른이름으로 저장하세요 ㅡ_ㅡ;
번호 제목 글쓴이 날짜 조회 수
31 MSN 주소를 알려주세요. [3] MrGeek 2006.09.16 85
30 [소스첨부] 인자값 변경. 청연 2006.09.14 59
29 주석제거 프로그램 (수정) 청연 2006.09.13 128
28 ★C언어 처음 하시는분들 보세요.. [3] 청연 2006.09.13 202
27 2. Direct로 그림그리기! [1] file 케이코냥이 2006.09.03 166
26 한국 위키백과를 추천합니다. MrGeek 2006.09.01 84
25 1. DirectX 8.0 sdk 해보기. file 케이코냥이 2006.08.28 154
24 C#.NET 유용한 포인터 사용법(1) - 스택기반의 배열 괴짜인간 2006.08.14 124
23 VB/VC 키코드 리스트 [1] 알닭 2006.04.23 202
22 [울스M프로젝트?!-┏]Html 기초부터 탄탄히 ! -4- [2] 울스M 2006.02.08 215
21 [울스M프로젝트?!-┏]Html 기초부터 탄탄히 ! -3- [2] 울스M 2006.02.08 160
20 [울스M프로젝트?!-┏]Html 기초부터 탄탄히 ! -2- [5] 울스M 2006.02.08 173
19 [울스M프로젝트?!-┏]Html 기초부터 탄탄히 ! -1- [2] 울스M 2006.02.08 558
18 [비법은 아니지만] 비주얼 베이직에 이스터 에그 발견! [1] StartCraft 2006.02.06 287
17 질문이요. [2] 블랙호크 2006.01.06 125
16 비트맵&브레인스토밍&프로그래밍의 도(道) [1] 성령의분노 2006.01.04 307
15 자료구조 (3) - 링크리스트 [3] 성령의분노 2006.01.01 209
» 자료구조 (2) - Queue[민프레스 강의정리] [1] 성령의분노 2005.12.31 150
13 자료구조 (1) - Stack [민프레스 강의정리] 성령의분노 2005.12.30 321
12 [VB] [CD-ROM] CD-ROM 열고 닫기 StartCraft 2005.08.21 351