데이터 구조 - 사 칙 연산
37070 단어 데이터 구조
실현 방법:
1. 먼저 두 개의 스 택 을 정의 합 니 다. 하 나 는 조작 자 를 저장 하 는 데 사용 되 고 하 나 는 작업 수 를 저장 하 는 데 사 용 됩 니 다.
1 #include<stdio.h>
2 #include<string>
3 #include<conio.h>
4 #define MAXSIZE 100
5 typedef float datatype;
6
7 typedef struct
8 {
9 datatype a[MAXSIZE];
10 int top;
11 }sequence_stack;
12
13 typedef struct
14 {
15 char b[MAXSIZE];
16 int top;
17 }SeqStack;
2. 두 개의 배열 이 필요 합 니 다. 하 나 는 입력 을 저장 하 는 접미사 표현 식 이 고 하 나 는 접미사 표현 식 을 변환 한 접미사 표현 식 을 저장 하 는 데 사 용 됩 니 다.
접미사 표현 식 을 접미사 표현 식 의 주요 코드 로 변환 합 니 다.
1 int operation(char op)//
2 {
3 switch(op)
4 {
5 case'+':
6 case'-':
7 case'*':
8 case'/':return 1;
9 default:return 0;
10 }
11 }
12 int priority(char op)//
13 {
14 switch(op)
15 {
16 case'#':return -1;
17 case'(':return 0;
18 case'+':
19 case'-':return 1;
20 case'*':
21 case'/':return 2;
22 default: return -1;
23 }
24 }
25 //
26 void postfix(char e[],char f[],SeqStack *s,sequence_stack *s1)
27 {
28 int i=0,j=0;
29 int t;
30 push_SeqStack(s,'#');
31 while(e[i]!='#')
32 {
33 if((e[i]>='0'&&e[i]<='9')||e[i]=='.')
34 f[j++]=e[i];
35 else if(e[i]=='(')
36 {
37 push_SeqStack(s,e[i]);
38 }
39 else if(e[i]==')')
40 {
41 t=s->top-1;
42 while(s->b[t]!='(')
43 {
44 f[j++]=s->b[--s->top];
45 t=s->top-1;
46 }
47 s->top--;
48 }
49 else if(operation(e[i]))
50 {
51 f[j++]=' ';
52 while(priority(s->b[s->top-1])>=priority(e[i]))
53 f[j++]=s->b[--s->top];
54 push_SeqStack(s,e[i]);
55 }
56 i++;
57 }
58 while (s->top)f[j++]=s->b[--s->top];
59 {}
60 evalpost(f,s1);
61 }
3. 접미사 표현 식 을 저장 하 는 배열 을 계산 후 표현 식 의 함수 에 전달 합 니 다.
접미사 표현 식 의 값 을 계산 하 는 주요 코드:
1 float readnumber(char f[],int *i)//
2 {
3 float x=0.0;
4 int k=0;
5 while(f[*i]>='0'&&f[*i]<='9')
6 {
7 x=x*10+(f[*i]-'0');
8 (*i)++;
9 }
10 if(f[*i]=='.')
11 {
12 (*i)++;
13 while(f[*i]>='0'&&f[*i]<='9')
14 {
15 x=x*10+(f[*i]-'0');
16 (*i)++;
17 k++;
18 }
19 }
20 while(k!=0)
21 {
22 x=x/10.0;
23 k=k-1;
24 }
25 return (x);
26 }
27 void evalpost(char f[],sequence_stack *s)
28 {
29 int i=0;
30 float x1,x2;
31 while(f[i]!='#')
32 {
33 if(f[i]>='0'&&f[i]<='9')
34 {
35 push_sequence_stack(s,readnumber(f,&i));
36 }
37 else if(f[i]==' ')
38 i++;
39 else if(f[i]=='+')
40 {
41 x2=s->a[--s->top];
42 x1=s->a[--s->top];
43 push_sequence_stack(s,x1+x2);
44 i++;
45 }
46 else if(f[i]=='-')
47 {
48 x2=s->a[--s->top];
49 x1=s->a[--s->top];
50 push_sequence_stack(s,x1-x2);
51 i++;
52 }
53 else if(f[i]=='*')
54 {
55 x2=s->a[--s->top];
56 x1=s->a[--s->top];
57 push_sequence_stack(s,x1*x2);
58 i++;
59 }
60 else if(f[i]=='/')
61 {
62 x2=s->a[--s->top];
63 x1=s->a[--s->top];
64 push_sequence_stack(s,x1/x2);
65 i++;
66 }
67 }
68 }
마지막 으로 계 산 된 결 과 를 호출 하면 작업 스 택 의 첫 번 째 위치 에 저장 하고 결 과 를 표시 할 곳 (자신의 프로그램 에 결 과 를 표시 할 수 있 는 곳) 에 전달 하면 결 과 를 표시 하 는 데 문제 가 없다.계산 할 표현 식 을 입력 하 십시오. 어떤 방식 으로 든 생각 할 수 있 습 니 다.자, 여기까지 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.