
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
-
56
-
57
-
58


본문내용
ueue[j].plane.remain_time <= 0 ))
{
// 그것의 인덱스를 저장.
idx.i = i;
idx.j = j;
return idx;// 인덱스 반환.
}
}
}
// 아닐경우. -1,-1 반환
return idx;
}
//////////////////////////////////////////////////////////////////////////
// queue method
// 삭제.
PLACE queue_pop_front( QUEUE* queue )
{
PLACE tmp;// 반환될 아이템.
// 프론트 위치 변경.
queue->front = (queue->front+1)%MAX_CIRCUL_QUEUE_SIZE;
tmp = queue->queue[queue->front];// 반환될 아이템 저장.
// 반환된 곳 0으로 초기화
memset( &(queue->queue[queue->front] ), 0 , sizeof(PLACE));
--(queue->size);// 사이즈 감소
return tmp;// 저장된 아이템 반환
}
// 뒤로 삽입.
void queue_push_back ( QUEUE* queue , PLACE item )
{
// 리어포인터 증가.
queue->rear = (queue->rear+1)%MAX_CIRCUL_QUEUE_SIZE;
queue->queue[queue->rear] = item;// 아이템 삽입.
++(queue->size);// 사이즈 증가.
}
//앞으로 삽입.
void queue_push_front( QUEUE* queue , PLACE item )
{
// 앞쪽에 삽입.
queue->queue[(queue->front)] = item ;
++(queue->size);//해당큐의 사이즈 증가.
// 프론트 포인터 변경.
if (--(queue->front) == -1)// 포인트가 -1이라면
{
// 프론트는 배열의 마지막 인덱스 번호
queue->front = MAX_CIRCUL_QUEUE_SIZE -1;
}
}
//////////////////////////////////////////////////////////////////////////
// stack method
// 삭제.
PLACE stack_pop( PLACE* stack , int* top )
{
return stack[(*top)--];
}
// 삽입
void stack_push( PLACE* stack , int* top , PLACE item )
{
stack[++(*top)] = item;
}
//////////////////////////////////////////////////////////////////////////
// 큐가 다 비어있다면 참을 반환
bool IsEmpty_all_queue( QUEUE* ptr )
{
int i;
bool full = TRUE;
for ( i = 0 ; i < MAX_ARRAY_SIZE ; i++ )
full &= IsEmpty_queue(ptr+i);
// AND 연산자 : 하나라도 FALSE(큐가 비어있지 않으면)라면 FALSE 값 유지
return full;
}
// 모든 큐가 가득 차 있다면. -1 하나라도 비어있다면 해당 인덱스를 반환.
int IsFull_all_queue( QUEUE* ptr )
{
int i ; // 임시 변수, 비어있는 곳의 인덱스
for ( i = 0 ; i < MAX_ARRAY_SIZE ; i++ )
{
if( IsFull_queue(ptr+i) == FALSE )
return i;// 비어있는 곳의 인덱스를 반환.
}
return FULL;
}
// holding 이 full이라면 -1 을 반환.
INDEX IsFull_holding(HOLD (*hold)[MAX_HOLDING_SIZE])
{
INDEX idx = { -1, -1};// 선회큐에서 비어있는 곳의 인덱스를 저장할 변수
int i , j ;// 임시 인덱스 변수
for ( i = 0 ; i < MAX_HOLDING_SIZE ; i++ ) {
for ( j = 0; j < MAX_HOLDING_SIZE ; j++ ) {
if (hold[i][j].plane.id == 0 )
{// 해당 선회큐가 비어있다면.
// 해당인덱스 저장 그리고 반환.
idx.i = i ;
idx.j = j ;
return idx;
}
}
}
// 다 가득차있다면 {-1,-1} 반환.
return idx;
}
// 해당 선회큐가 모두 비어있다면 참을 반환
bool IsEmpty_holding(HOLD (*hold)[MAX_HOLDING_SIZE])
{
int i , j ;// 임시 인덱스 변수
for ( i = 0 ; i < MAX_HOLDING_SIZE ; i++ ) {
for ( j = 0; j < MAX_HOLDING_SIZE ; j++ )
// 해당 위치에 비행기가 존재한다면 거짓 반환.
if (hold[i][j].plane.id != 0 ) return FALSE;
}
// 모두 비어있을경우 참 반환.
return TRUE;
}
// 활주로가 비어있다면 트루 반환
bool IsEmpty_runway( RUNWAY* run )
{
int i ;// 임시 인덱스
bool full = TRUE ;
for ( i = 0 ; i < MAX_RUNWAY_NUM ; i++ )
// 해당 아이템이 비어있지 않다면 거짓을 AND 연산해서 저장.
full &= ((run[i].plane.id == 0)? TRUE : FALSE);
// 그것을 반환
return full;
}
// 가득차있다면. -1을 반환. 그렇지 않다면 비어있는 곳의 인덱스를 반환.
int IsFull_runway( RUNWAY* run )
{
int i ;// 임시 인덱스 변수
for ( i = 0 ; i < MAX_RUNWAY_NUM ; i++ )
// 해당 활주로가 비어있다면 그곳의 인덱스를 반환
if (run[i].plane.id == 0)return i;
return FULL;
}
// simulation_airport.c END
{
// 그것의 인덱스를 저장.
idx.i = i;
idx.j = j;
return idx;// 인덱스 반환.
}
}
}
// 아닐경우. -1,-1 반환
return idx;
}
//////////////////////////////////////////////////////////////////////////
// queue method
// 삭제.
PLACE queue_pop_front( QUEUE* queue )
{
PLACE tmp;// 반환될 아이템.
// 프론트 위치 변경.
queue->front = (queue->front+1)%MAX_CIRCUL_QUEUE_SIZE;
tmp = queue->queue[queue->front];// 반환될 아이템 저장.
// 반환된 곳 0으로 초기화
memset( &(queue->queue[queue->front] ), 0 , sizeof(PLACE));
--(queue->size);// 사이즈 감소
return tmp;// 저장된 아이템 반환
}
// 뒤로 삽입.
void queue_push_back ( QUEUE* queue , PLACE item )
{
// 리어포인터 증가.
queue->rear = (queue->rear+1)%MAX_CIRCUL_QUEUE_SIZE;
queue->queue[queue->rear] = item;// 아이템 삽입.
++(queue->size);// 사이즈 증가.
}
//앞으로 삽입.
void queue_push_front( QUEUE* queue , PLACE item )
{
// 앞쪽에 삽입.
queue->queue[(queue->front)] = item ;
++(queue->size);//해당큐의 사이즈 증가.
// 프론트 포인터 변경.
if (--(queue->front) == -1)// 포인트가 -1이라면
{
// 프론트는 배열의 마지막 인덱스 번호
queue->front = MAX_CIRCUL_QUEUE_SIZE -1;
}
}
//////////////////////////////////////////////////////////////////////////
// stack method
// 삭제.
PLACE stack_pop( PLACE* stack , int* top )
{
return stack[(*top)--];
}
// 삽입
void stack_push( PLACE* stack , int* top , PLACE item )
{
stack[++(*top)] = item;
}
//////////////////////////////////////////////////////////////////////////
// 큐가 다 비어있다면 참을 반환
bool IsEmpty_all_queue( QUEUE* ptr )
{
int i;
bool full = TRUE;
for ( i = 0 ; i < MAX_ARRAY_SIZE ; i++ )
full &= IsEmpty_queue(ptr+i);
// AND 연산자 : 하나라도 FALSE(큐가 비어있지 않으면)라면 FALSE 값 유지
return full;
}
// 모든 큐가 가득 차 있다면. -1 하나라도 비어있다면 해당 인덱스를 반환.
int IsFull_all_queue( QUEUE* ptr )
{
int i ; // 임시 변수, 비어있는 곳의 인덱스
for ( i = 0 ; i < MAX_ARRAY_SIZE ; i++ )
{
if( IsFull_queue(ptr+i) == FALSE )
return i;// 비어있는 곳의 인덱스를 반환.
}
return FULL;
}
// holding 이 full이라면 -1 을 반환.
INDEX IsFull_holding(HOLD (*hold)[MAX_HOLDING_SIZE])
{
INDEX idx = { -1, -1};// 선회큐에서 비어있는 곳의 인덱스를 저장할 변수
int i , j ;// 임시 인덱스 변수
for ( i = 0 ; i < MAX_HOLDING_SIZE ; i++ ) {
for ( j = 0; j < MAX_HOLDING_SIZE ; j++ ) {
if (hold[i][j].plane.id == 0 )
{// 해당 선회큐가 비어있다면.
// 해당인덱스 저장 그리고 반환.
idx.i = i ;
idx.j = j ;
return idx;
}
}
}
// 다 가득차있다면 {-1,-1} 반환.
return idx;
}
// 해당 선회큐가 모두 비어있다면 참을 반환
bool IsEmpty_holding(HOLD (*hold)[MAX_HOLDING_SIZE])
{
int i , j ;// 임시 인덱스 변수
for ( i = 0 ; i < MAX_HOLDING_SIZE ; i++ ) {
for ( j = 0; j < MAX_HOLDING_SIZE ; j++ )
// 해당 위치에 비행기가 존재한다면 거짓 반환.
if (hold[i][j].plane.id != 0 ) return FALSE;
}
// 모두 비어있을경우 참 반환.
return TRUE;
}
// 활주로가 비어있다면 트루 반환
bool IsEmpty_runway( RUNWAY* run )
{
int i ;// 임시 인덱스
bool full = TRUE ;
for ( i = 0 ; i < MAX_RUNWAY_NUM ; i++ )
// 해당 아이템이 비어있지 않다면 거짓을 AND 연산해서 저장.
full &= ((run[i].plane.id == 0)? TRUE : FALSE);
// 그것을 반환
return full;
}
// 가득차있다면. -1을 반환. 그렇지 않다면 비어있는 곳의 인덱스를 반환.
int IsFull_runway( RUNWAY* run )
{
int i ;// 임시 인덱스 변수
for ( i = 0 ; i < MAX_RUNWAY_NUM ; i++ )
// 해당 활주로가 비어있다면 그곳의 인덱스를 반환
if (run[i].plane.id == 0)return i;
return FULL;
}
// simulation_airport.c END
소개글