(C언어) 후위표기 수식의 연산 프로그램
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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | #include <stdio.h> #include <stdlib.h> #include <string.h> typedef int element; //int를 element로 변환 //원소를 저장할 스택노드 구조체 구현 typedef struct stackNode { element data; struct stackNode *link; }stackNode; //스택 최상단 변수 선언 stackNode* top; void push(element item) //연결 리스트 스택의 삽입 연산 { stackNode* temp = (stackNode *)malloc(sizeof(stackNode)); temp->data = item; temp->link = top; top = temp; } element pop() //연결 리스트 스택의 삭제 후 반환 연산 { element item; stackNode* temp = top; if (top == NULL) { printf("\n\n Stack empty!\n"); return 0; } else { item = temp->data; top = temp->link; free(temp); return item; } } element peek() //연결 리스트 스택의 top 원소 검색 연산 { element item; if (top == NULL) { printf("\n\n Stack is empty!\n"); return 0; } else { item = top->data; return item; } } void del() //연결 리스트 스택의 삭제 연산 { stackNode* temp; if (top == NULL) { printf("\n\n Stack is empty! \n"); } else { temp = top; top = top->link; free(temp); } } void printStack() //연결리스트 스택의 출력 연산 { stackNode* p = top; printf("\n STACK [ "); while (p) { printf("%d", p->data); p = p->link; } printf("] "); } element evalPostfix(char *exp) //후위 표기법을 계산하는 연산 { int opr1, opr2, value, i = 0; int length = strlen(exp); char symbol; top = NULL; for (i = 0; i < length; i++) { symbol = exp[i]; if (symbol != '+' && symbol != '-' && symbol != '*' && symbol != '/') { value = symbol - '0'; push(value); } else { opr2 = pop(); opr1 = pop(); switch (symbol) { case '+': push(opr1 + opr2); break; case '-': push(opr1 - opr2); break; case '*': push(opr1 * opr2); break; case '/': push(opr1 / opr2); break; } } } return pop(); } void main(void) { int result; char* express = "35*62/-"; printf("후위표기식 =>%s",express); result = evalPostfix(express); printf("\n\n연산결과 => %d", result); getchar(); } | cs |
출력결과
[출처] (C언어) 후위표기 수식의 연산 프로그램|작성자 길가다주은노트북
'프로그래밍 > C' 카테고리의 다른 글
(C언어) 이진 탐색 트리의 연산 프로그램 (0) | 2016.07.09 |
---|---|
(C언어) 큐를 이용한 서비스 요청 고객 관리 프로그램 (0) | 2016.07.09 |
(C언어) 이중 연결 리스트의 원소 삭제 알고리즘 (0) | 2016.07.09 |
(C언어) 원형 연결 리스트의 첫 번째 노드 삽입 알고리즘 (0) | 2016.07.09 |
(C언어) 연결형 리스트 탐색 알고리즘 구현 (0) | 2016.07.09 |