스택과 큐를 이용한 중위 표기의 후위 표기 전환 프로그램
본 자료는 4페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
해당 자료는 4페이지 까지만 미리보기를 제공합니다.
4페이지 이후부터 다운로드 후 확인할 수 있습니다.

목차

▶문제: 키보드로 중위 표기(infix)의 산술식을 입력 받아서 후위 표기(postfix) 산술식으로 전환하여 출력한다.(단,스택을 이용한 처리이다..)

▶ 고속도로를 통과하는 차량이 요금 계산소에 대기하고, 요금 계산이 끝난 차량은 통과시키는 프로그램을 구현하자.(큐를 구현하는 취지이므로 환상형 큐를 이용해라.)

본문내용

tail이라고 하며, 자료가 삭제되는 앞쪽을 가리키는 포인터를 front, 또는 head라고 한다. 일상 생활에서 큐의 사용 예를 보여주기 위해서 고속도로에서 통행 요금을 내는 계산소의 업무를 가상으로 구현했다. 통행료 지불 과정은 큐의 특성처럼 먼저 도착한 차량이 먼저 요금을 지불하고 통과할 수 있고, 뒤에 들어온 차량들은 앞 차량이 처리될 때까지 뒤에서 대기하게 된다. 따라서 큐의 특성과 같기 때문에 고속도로 통행 요금과 관련된 업무를 구현했다. 구현된 프로그램은 우선 대기차량 수를 100로 제한하였다. 이것은 큐의 크기를 의미하는 것이다. 그리고 차량을 통과 시키는 과정과 차량을 추가시키는 과정을 구현했다. 차량을 통과시키는 업무는 큐에서 앞의 데이터가 먼저 처리되는 것을 의미하고, 대기 차량을 추가시키는 것은 큐에서 데이터가 뒤에 추가되는 것을 의미한다. 대기 상태는 현재 큐의 상태를 보여주는 것이다..
실행 결과)
* 첫 실행화면..
* 큐가 빈 상태에서 1번메뉴 선택시.
* 큐가 빈상태에서 3번메뉴 선택시..
*2번 메뉴 선택시..
* 2번 메뉴에서 차량을 추가시킬 경우..(마티즈 입력)
* 차량 입력 후 3번 메뉴 선택시..(마티즈,포니,아반떼 순..)
* 차량 입력후 1번 메뉴 선택시..
* 1번 메뉴 선택후 3번 메뉴 선택시..(가장 먼저 들어온 마티즈가 삭제 되었다.)
* 다시 2번 메뉴 선택하고 소나타를 입력후 3번 메뉴를 선택시.(마지막에 소나타 삽입됨)
source)
#include
#include
#include
#include
#include
/* car 구조체: 차량입력을 위한 구조체
queue[100]: 큐의 크기
front: 큐의 앞쪽을 가리키는 변수
rear: 큐의 뒤쪽을 가리키는 변수
tag: 큐의 오버플로우와 큐가 비었을 때를 구분하기 위한 태크
insert_queue(char *car) 큐에 데이터를 삽입하기위한 함수
char delete_queue() 큐에서 데이터를 삭제하기위한 함수
view_wait_car() 큐의 상태를 보여주기 위한 함수
*/
struct car{
char name[50];
};
car queue[100];
int front=0,rear=0;
int tag=0;
void insert_queue(char *car);
char delete_queue();
void view_wait_car();
main(){
int menu;
char car_name[50];
clrscr();
for(;;){
cout<<"*** 고속도로 요금 계산 ***\n";
cout<<"* 메뉴를 선택하세요..\n";
cout<<"1.요금 계산 차량 통과\n";
cout<<"2.새로 들어온 차량 추가\n";
cout<<"3.대기상태 보기\n";
cout<<"4.종료(단,최대 대기 차량수는 100대입니다.\n>";
cin>>menu;
switch(menu){
case 1: delete_queue();
break;
case 2: cout<<"\n차량 이름 입력:";
gets(car_name);
insert_queue(car_name);
break;
case 3:view_wait_car();
break;
case 4: return 0;
}
}/*end for*/
}/*end main*/
/* 삽입 조작시 front=rear가 되면 tag를 0에서 1로 변화시켜 데이터를 삽입하고나면 다음번의 삽입 조작은 큐의 오버플로우 상태(tag=1)로 처리된다. 실제 배열을 이용한 큐의 끝과 처음을 환상형처럼 조작하는 방법은 나머지를 구하여 주는 mod연산자를 사용하여 처리할 수 있다. */
void insert_queue(char car[]){
if(tag==1){
cout<<"\n최대 대기차량수를 넘었습니다!!!";
cout<<"\npress any key...";
getch();
clrscr();
return;
}/* 큐 오버플로우시 처리 부분(대기차량수가 넘었다는 메시지 출력) */
rear=(rear+1)%100;
if(front==rear) tag=1;
strcpy(queue[rear].name,car);
cout<<"\n차량 입력완료";
cout<<"\npress any key...";
getch();
clrscr();
return;
}/* 큐의 삽입 조작 부분(차량입력완료라는 메시지로 출력) */
/* 환상형 큐의 공백 유무를 검사한 후 front 포인터를 mod 연산자로 변화시킨 후 큐를 삭
제한다. 큐가 꽉찬 상태(front=rear)에서 처음 삭제 조작이 수행되면 tag를 1에서 0으로변환시킨다.
*/
char delete_queue(){
int i;
if(front==rear && tag==0){
cout<<"\n대기차량이 없습니다!!";
cout<<"\npress any key...";
getch();
clrscr();
return 0;
}/* 큐가 비었을 때의 처리 부분(대기차량이 없다는 메시지 출력)*/
if(front==rear) tag=0;
front=(front+1)%100;
i=front;
cout<<"\n"< cout<<"\npress any key...";
strcpy(queue[front].name,NULL);
getch();
clrscr();
return 0;
}/* 큐의 삭제 부분(통과라는 메시지로 출력) */
/* 큐의 상태를 보여주는 부분 */
void view_wait_car(){
int i,j;
cout<<"대기차량 순서\n";
if(front==rear&&tag==0){
cout<<"대기차량이 없습니다..!!";
cout<<"\npress any key...";
getch();
clrscr();
return;
}/* 큐가 비었을 경우 처리부분(대기차량이 없다는 메시지 출력)*/
for(i=front;i<=rear;i++){
cout< }
cout<<"\npress any key...";
getch();
clrscr();
return;
}

키워드

스택,   ,   프로그램
  • 가격2,000
  • 페이지수14페이지
  • 등록일2007.01.12
  • 저작시기2007.1
  • 파일형식한글(hwp)
  • 자료번호#387972
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니