数据结构小论文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
表达式求值运算
一、数据结构的概念
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。根据数据元素间关系的不同特性,通常有下列四类基本的结构:⑴集合结构。该结构的数据元素间的关系是“属于同一个集合”。
⑵线性结构。该结构的数据元素之间存在着一对一的关系。⑶树型结构。该结构的数据元素之间存在着一对多的关系。⑷图形结构。该结构的数据元素之间存在着多对多的关系,也称网状结构。常用结构有链表、栈、队列、数组、树、图、堆、散列表。
二、运用的数据结构——栈
栈是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据,即最后一个数据被第一个读出来。
三、构建的数学模型
四、程序代码
#include "stdio.h"
#include
#include
#include
using namespace std;
int in(char c)
{
switch (c){
case'+':
case'-':
case'*':
case'/':
case'(':
case')':
case'#':return 1;
default: return 0;
}
}//判断C是否是运算符
char precede(char t1,char t2){ char f;
switch(t2){
case'+':
case'-':if(t1=='('||t1=='#')
f='<';
else
f='>';
break;
case'*':
case'/':if(t1=='*'||t1=='/'||t1==')')
f='>';
else
f='<';
break;
case'(':if(t1==')'){
printf("input error\n");
return (0);
}
else
f='<';
break;
case')':switch(t1){
case'(':f='=';
break;
case'#':printf("input error\n");
return (0);
default:f='>';
}
break;
case'#':switch(t1){
case'#':f='=';
break;
case'(':printf("input error\n");
return (0);
default:f='>';
}
}
return f;
}//判断两个运算符的优先级
int operate(int b,char theta,int a){
int c;
switch(theta){
case'+':c=(a+b);
break;
case'-':c=(a-b);
break;
case'*':c=(a*b);
break;
case'/':c=(a/b);
}
return c;
}//对两个操作数进行计算,theta是运算符
int evaluateexpress(){
stack
stack
char d[]={'#','\0'};//将#放入定义的d数组
int a,x,b;//初始化操作数a,x,b
char n;
optr.push('#');
cin>>c;
strcat(c,d);//合并c,d数组,输入算术表达式时不用在末尾输入#
int i=0;
while(c[i]!='\0'){
if(!in(c[i])){
c[i]-='0';
int m;
m=c[i];
int j=i+1;
if(!in(c[j])){
c[j]-='0';
m=m*10+c[j];
i++;
}
opnd.push(m);
i++;
}
else{
n=optr.top();
switch(precede(n,c[i])){ //c[i]尚未入栈,n是运算符栈的栈顶元素case'<':optr.push(c[i]);
break;
case'=':optr.pop();
break;
case'>':theta=optr.top();optr.pop();
a=opnd.top();opnd.pop();
b=opnd.top();opnd.pop();
opnd.push(operate(a,theta,b));
continue;
}
i++;
}