⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 这是有关数据结构的例程序
💻 C
字号:
#include<stdio.h>
#include<malloc.h>
#include<math.h>
#include"definition.h"

int main()
{
	SqStack Optr, Opnd, tmp;
	int a, e, i, j, flag;

	if( InitStack(&Optr) ){//运算符栈
		printf("创建堆栈失败。\n");
		return 1;
	}
	if( InitStack(&Opnd) ){//运算数栈
		printf("创建堆栈失败。\n");
		return 1;
	}
	if( InitStack(&tmp) ){//临时栈
		printf("创建堆栈失败。\n");
		return 1;
	}

	//接收表达式
	printf("请输入一个算术表达式:");
	e=getchar();
	while( (flag=Chk(e)) && ( e!='\n'||GetTop(&Optr) ) ){//如果输入合法
		if(flag==2){
			//运算数入栈
			for( i=0,j=0; tmp.base != tmp.top; j++ ){
				a=Pop(&tmp)-48;
				a *= (int)pow(10, j);
				i += a;
			}
			if( Push(&Opnd, i) ){
				printf("内存不足。\n");
				return 1;
			}

			switch( Precede( GetTop(&Optr), e) ){
			case -1://栈顶元素优先权低
				if( Push(&Optr, e) ){
					printf("内存不足。\n");
					return 1;
				}
				e=getchar();
				break;
			case 0://括号出栈
				Pop(&Optr);
				e=getchar();
				break;
			case 1://退栈并将运算结果入栈
				e=Pop(&Opnd);
				if( Push( &Opnd, Operate( Pop(&Opnd), Pop(&Optr), e ) ) ){
					printf("内存不足。\n");
					return 1;
				}
				break;
			default:
				return 1;
			}			
		}
		else{
			if( Push(&tmp, e) ){//压栈失败,退出
				printf("内存不足。\n");
				return 1;
			}
			//压栈成功
			e=getchar();
		}		
	}

	printf("结果为:%d\n", GetTop(&Opnd));
	//释放内存
	free(tmp.base);
	free(Optr.base);
	free(Opnd.base);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -