스택 이용 중위 표기의 후위 표기 전환 프로그램
본문 /* 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(tag1){ cout<<"\n최대 대기차량수를 넘었습니다!!!"; cout<<"\npress any key."; getch(); clrscr(); return; }/* 큐 오버플로우시 처리 부분(대기차량수가 넘었다는 메시지 출력) */ rear=(rear+1)%100; if(frontrear) tag=1; strcpy(queue[rear].name,car); cout<<"\n차량 입력완료"; cout<<"\npress any key."; getch(); clrscr(); return; 본문내용 이용한 처리이다) ◈ 입 력: A + B * C - D ◈ 출력1: ABC*+D- 예1) 중위 표기식 3+8*9-7의 식이 입력되면 389*+7- 의 후위 표기식으로 바꾸어 화면에 출력한다. 예2) 괄호를 포함하는 중위 표기식도 후위 표기식으로 바꿀 수 있어야 한다. 중위 표기식 3+8*(9-7)/2 이 입력되면, 마찬가지로 3897-*2/+ 의 후위 표기식으로 바꾸어 화면에 출력한다. 풀 이 > 중위 표기식을 후위 표기로 전환하는 프로그램을 작성하기 위해 중위 표기에서 후위 표기로 바꾸는 과정을 배열 스택을 이용해서 작성했다. 물론 연결 스택보다 메모리 활용면에서 많은 낭비가 있지만, 연결 스택에 비해서 배열 스택이 전체적인 알고리즘면에서 복잡하지않고, 또한 문제의 데이터량이 많지 않았기 때문에 |