티스토리 뷰
#include<stdio.h>
#include <stdlib.h>
#define MAXQUEUE 5
struct queuestruct
{
int queue[MAXQUEUE];
int front, rear;
};
void AddQueue(struct queuestruct *q1, int x);
int DeleteQueue(struct queuestruct *q1);
void main()
{
struct queuestruct q1;
int select, data;
q1.front = -1;
q1.rear = -1;
do{
printf("\n *****************************************\n");
printf("* 1. AddQueue(큐에 데이터 삽입) 선택 *\n");
printf("* 2. DeleteQueue(큐에서 데이터 추출) 선택 *\n");
printf("* 3. 큐 종료 *\n");
printf("\n *****************************************\n");
printf("메뉴를 선택하세요 (1,2,3,)");
scanf("%d",&select);
if(select == 1)
{
printf("삽입할 데이터를 입력하세요 ? ");
scanf("%d",&data);
AddQueue(&q1, data);
}
else if(select == 2)
{
printf("큐에서 꺼낸 데이터 = %d \n",DeleteQueue(&q1));
}
}while (select != 3);
}
void AddQueue(struct queuestruct *q1, int x)
{
if(q1->rear == MAXQUEUE -1)
{
printf("큐가 가득 찼습니다");
}
q1->queue[++q1->rear] = x;
}
int DeleteQueue(struct queuestruct *q1)
{
int deletedata;
if(q1->front == q1->rear)
{
printf("큐가 비었습니다");
exit(1);
}
else
{
deletedata = q1->queue[++q1->front];
}
return(deletedata);
}
1,2,3,4,5 입력후 1,2를 빼고 6을 넣었을때의 모습
큐 시프트
데이터를 뺴내었을때 한칸씩 밀어 큐에 잔여 저장 공간을 없앰
#include<stdio.h>
#include <stdlib.h>
#define MAXQUEUE 5 // MAXQUEUE를 5로 초기화
struct queuestruct
{
int queue[MAXQUEUE];
int front, rear;
};
void AddQueue(struct queuestruct *q1, int x);
int DeleteQueue(struct queuestruct *q1);
void main()
{
struct queuestruct q1;
int select, data;
q1.front = -1;
q1.rear = -1;
do{
printf("\n *****************************************\n");
printf("* 1. AddQueue(큐에 데이터 삽입) 선택 *\n");
printf("* 2. DeleteQueue(큐에서 데이터 추출) 선택 *\n");
printf("* 3. 큐 종료 *\n");
printf("\n *****************************************\n");
printf("메뉴를 선택하세요 (1,2,3)");
scanf("%d",&select);
if(select == 1) // 입력받은 데이터가 1이라면
{
printf("삽입할 데이터를 입력하세요 ? "); // 안내문 출력
scanf("%d",&data); // data로 데이터 입력 받고
AddQueue(&q1, data); // AddQueue 함수 호출
}
else if(select == 2) // 입력받은 데이터가 2라면
{
printf("큐에서 꺼낸 데이터 = %d\n",DeleteQueue(&q1)); // DeleteQueue 함수에서 데이터 받아서 출력
}
}while (select != 3); // select가 3이 아닐때까지 계속...
}
void AddQueue(struct queuestruct *q1, int x) // 큐 운용이 많을시를 대비하여 지정된 큐만 사용하기 위해 인자로 보냄
{
int i,j;
if (q1->front == -1 && q1->rear == MAXQUEUE -1) // 큐 overflow 검사
{
printf("큐가 가득 찼습니다.\n"); // 가득찼다면 안내문 출력
exit(1);
}
else if(q1->rear == MAXQUEUE-1) // 만약 rear가 큐 마지막 방이라면
{
for(i=q1->front+1, j=0; i<= MAXQUEUE - 1; i++,j++) // i가 front +1, j는 0부터 i가 큐 마지막 방까지 i와 j는 증가
{
q1->queue[j] = q1->queue[i]; // j가 가르키는 방을 i가 가르키는 방의 데이터로 이동
}
q1->rear = q1->rear-q1->front-1; // rear는 rear - front -1로 변경
q1->front = -1; // front는 -1로 변경
}
q1->queue[++q1->rear] = x; //q1의 rear를 증가시키고 받은 데이터를 입력
}
int DeleteQueue(struct queuestruct *q1)
{
int deletedata; //데이터를 임시 보관하기 위한 변수 선언
if(q1->front == q1->rear) //큐 empty 검사
{
printf("큐가 비었습니다.\n"); // 비었다면 안내문 출력
exit(1);
}
deletedata = q1->queue[++q1->front]; //q1의 front를 증가시키고 꺼낼 데이터를 deletedata로 이동
return(deletedata); // 받은 데이터를 리턴
}
위와 동일하게 1,2,3,4,5 입력후 1,2 빼고 6,7을 입력한 다음 큐의 데이터를 모두 뺐을때
'Programming? > C++' 카테고리의 다른 글
[C] 구조체 퀵정렬 (0) | 2012.06.10 |
---|---|
[C] 정수형 퀵정렬 (0) | 2012.06.10 |
[C] 스택 (0) | 2012.06.10 |
[C] 초간단 계산기 (0) | 2012.06.10 |
[C] 배열 최대값 프로그램(5개 입력) (0) | 2012.06.10 |
- Total
- Today
- Yesterday
- League of legends
- oracle
- java
- spring
- 무사헌터G
- Unleashed
- jsp
- DnF_카인
- HTML
- XML
- Android
- 포세리앙 시밤...
- jdbc
- 이건사야되!
- Talesweaver_Palshu
- C Programming
- PSP
- GOD EATER2
- PS VITA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |