数据结构小论文

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 opnd;//声明了1个存储int型元素的栈,存储操作数opnd

stack optr;//声明了1个存储char型元素的栈,存储运算符optr char theta,c[100];

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++;

}

相关文档
最新文档