首页 范文大全 古典文学 职场知识 中国文学 公文书信 外国名著 寓言童话 百家讲坛 散文/诗歌 美文欣赏 礼仪知识 民俗风情
  • 工作总结
  • 工作计划
  • 心得体会
  • 竞聘演讲
  • 会议发言
  • 爱国演讲
  • 就职演说
  • 开业开幕
  • 思想学习
  • 征文演讲
  • 经验材料
  • 述职报告
  • 调研报告
  • 工作汇报
  • 年终总结
  • 申报材料
  • 学习体会
  • 企划方案
  • 活动方案
  • 技巧经验
  • 模板范例
  • 思想宣传
  • 经济工作
  • 工作报告
  • 组织人事
  • 反腐倡廉
  • 慰问贺电
  • 先进事迹
  • 思想汇报
  • 入党申请书
  • 党会发言
  • 先进性教育
  • 入团申请书
  • 个人简历
  • 演讲稿
  • 调查报告
  • 实习报告
  • 和谐社会
  • 观后感
  • 读后感
  • 作文范文
  • 自我鉴定
  • 讲话稿
  • 自查报告
  • 数据结构实习报告:设计一个演示用运算优先法对算数表达式求值过程程序

    时间:2021-03-05 18:05:25 来源:蒲公英阅读网 本文已影响 蒲公英阅读网手机站

    相关热词搜索:数据结构 算数 表达式

    数据结构实习报告:设计一个演示用运算优先法对算数表达式求值过程的程序 本文关键词:数据结构,算数,表达式,运算,演示

    数据结构实习报告:设计一个演示用运算优先法对算数表达式求值过程的程序 本文简介:实习报告题目:设计一个演示用运算优先法对算数表达式求值过程的程序。班级:姓名:学号:完成日期:一、需求分析1建立运算数栈SqStack1和运算符栈SqStack2辅助分析算符有限关系.2用户输入以“#”结尾的算数表达式,本程序需要用户自行输入表达式(运算符可以是加(+);减(-);乘(*);除(/)

    数据结构实习报告:设计一个演示用运算优先法对算数表达式求值过程的程序 本文内容:

    实习报告

    题目:设计一个演示用运算优先法对算数表达式求值过程的程序。

    班级:

    姓名:

    学号:

    完成日期:

    一、

    需求分析

    1建立运算数栈SqStack1和运算符栈SqStack2辅助分析算符有限关系.

    2用户输入以“#”结尾的算数表达式,本程序需要用户自行输入表达式(运算符可以是加(+);减(-);乘(*);除(/);括号(())),以字符形式读入,在读入的同时,完成运算符和运算数的识别处理,在识别出运算数的同时,要将其字符序列形式转换成整数形式。

    3在程序的适当位置输出运算符栈、运算数栈、输入字符和主要操作的内容,即演示运算操作。

    4测试数据见原题。

    5程序执行的命令包括:

    (1)

    建立算数表达式;

    (2)

    得到运算表达式的值;

    (3)

    演示运算过程。

    二、

    概要设计

    1.

    设定栈的抽象数据类型定义:

    ADT

    Stack{

    数据对象

    D={

    ai

    |

    ai

    ∈charSet,i=1,2,.,n,n≥0

    }

    数据关系:

    R1={

    |

    ai-1,ai∈D,i=2,.,n

    }

    (约定an

    端为栈顶,a1

    端为栈底)

    基本操作:

    InitStack(

    inttop;

    int

    stacksize;

    }SqStack1;//操作数栈

    typedef

    struct{

    charbase;

    chartop;

    int

    stacksize;

    }SqStack2;//操作符栈

    2、

    栈类型

    typedef

    struct{

    charbase;

    chartop;

    int

    stacksize;

    }Stack;

    //栈类型

    栈的基本操作设置如下:

    void

    InitStack(Stack

    S.top=p;

    S.size++;

    Return

    TRUE;

    }

    else

    return

    FALSE;

    }

    Status

    Pop(Stack

    else{

    p=S.top;S.top=S.top->next;

    e=p->:data;S.size--;

    return

    TRUE;

    }

    }

    3、运算代码

    int

    Operate(int

    a,char

    theta,int

    b)

    //计算表达式值:主要是将大的表达式转化成小的表达式进行逐步求值

    {

    int

    c;

    if(theta==

    +

    )

    c=a+b;

    else

    if(theta==

    -

    )

    c=a-b;

    else

    if(theta==

    )

    c=a*b;

    else

    c=a/b;

    return

    c;

    }//Operate

    int

    result(SqStack1OPND,SqStack2OPTR)

    //求值

    {

    char

    a=0;

    char

    theta;

    int

    b,c,number=0;

    IntInitStack(OPND);

    CharInitStack(OPTR);

    CharPush(OPTR,#

    );

    a=getchar();

    while(a!=

    #

    ||

    CharGetTop(OPTR)!=

    #

    )

    {

    printf(“输入字符:%c

    “,a);

    if(!In(a))//不是运算符则进栈

    {

    number=0;

    while(!In(a))

    {

    number

    =

    number*10

    +(a-48);//处理多位整数z=10*x+y

    a

    =

    getchar();

    }

    IntPush(OPND,number);

    printf(“主要操作:Push(OPND,%d)

    “,number);

    }

    else

    switch(Precede(a,CharGetTop(OPTR)))

    {

    case

    :

    theta=CharPop(OPTR);

    c=IntPop(OPND);

    b=IntPop(OPND);

    IntPush(OPND,Operate(b,theta,c));

    printf(“主要操作:Operate(%d,%c,%d)

    “,b,theta,c);

    break;

    }

    printf(“OPND栈:%d

    OPTR栈:%c/n“,IntGetTop(OPND),CharGetTop(OPTR));

    }

    printf(“The

    result

    is

    %d./n“,IntGetTop(OPND));

    //打印输出表达式值

    return

    OK;

    }

    4.主函数和其他函数的代码

    void

    main()

    //主函数,使用自定义函数完成功能

    {

    SqStack1

    s1,*OPND;

    SqStack2

    s2,*OPTR;

    OPND=

    OPTR=

    printf(“Please

    enter

    an

    expression

    with

    a

    end

    of

    #

    ./n“);

    printf(“The

    Expression:“);

    result(OPND,OPTR);

    }

    char

    Precede(char

    a,char

    b)//运算优先级判断

    {

    int

    i,j;

    char

    Table[8][8]={,+,-,*,/,(,),#,+,>,>,,>,-,>,>,,>,*,>,>,>,>,,>,/,>,>,>,>,,>,(,,>,>,>,,>,>,#,#include

    #include

    #include

    #define

    STACK_INIT_SIZE

    100

    #define

    STACKINCREMENT

    10

    #define

    ERROR

    0

    #define

    OK

    1

    //********************************************栈模块

    typedef

    struct

    SqStack1//运算数栈

    {

    intbase;

    inttop;

    int

    stacksize;

    }SqStack1;

    typedef

    struct

    SqStack2//运算符栈

    {

    charbase;

    chartop;

    int

    stacksize;

    }SqStack2;

    void

    IntInitStack(SqStack1S)

    {

    S->base=(int)malloc(STACK_INIT_SIZE*sizeof(int));

    if(!S->base)

    exit(ERROR);

    S->top=S->base;

    S->stacksize=STACK_INIT_SIZE;

    }

    void

    CharInitStack(SqStack2S)

    {

    S->base=(char)malloc(STACK_INIT_SIZE*sizeof(char));

    if(!S->base)

    exit(ERROR);

    S->top=S->base;

    S->stacksize=STACK_INIT_SIZE;

    }

    int

    IntGetTop(SqStack1S)

    //取栈顶元素

    {

    int

    e;

    if((*S).top==(*S).base)

    return

    0;

    e=*((*S).top-1);

    return

    e;

    }

    char

    CharGetTop(SqStack2S)

    //取栈顶元素

    {

    char

    e;

    if((*S).top==(*S).base)

    return

    0;

    e=*((*S).top-1);

    return

    e;

    }

    int

    IntPush(SqStack1S,int

    e)

    {(*S).top++=e;

    return

    OK;

    }

    int

    CharPush(SqStack2S,char

    e)

    {(*S).top++=e;

    return

    OK;

    }

    int

    IntPop(SqStack1S)

    {

    int

    e;

    if((*S).top==(*S).base)

    return

    0;

    e=*--(*S).top;

    return

    e;

    }

    int

    CharPop(SqStack2S)

    {

    char

    e;

    if((*S).top==(*S).base)

    return

    0;

    e=*--(*S).top;

    return

    e;

    }

    //——————————————————*******************运算模块

    char

    Precede(char

    a,char

    b)//运算优先级判断

    {

    int

    i,j;

    char

    Table[8][8]={,+,-,*,/,(,),#,+,>,>,,>,-,>,>,,>,*,>,>,>,>,,>,/,>,>,>,>,,>,(,,>,>,>,,>,>,#,:

    theta=CharPop(OPTR);

    c=IntPop(OPND);

    b=IntPop(OPND);

    IntPush(OPND,Operate(b,theta,c));

    printf(“主要操作:Operate(%d,%c,%d)

    “,b,theta,c);

    break;

    }

    printf(“OPND栈:%d

    OPTR栈:%c/n“,IntGetTop(OPND),CharGetTop(OPTR));

    }

    printf(“/n结果:%d./n“,IntGetTop(OPND));

    //打印输出表达式值

    return

    OK;

    }

    //————————————————————————主程序模块

    void

    main()

    //主函数,使用自定义函数完成功能

    {

    SqStack1

    s1,*OPND;

    SqStack2

    s2,*OPTR;

    OPND=

    OPTR=

    printf(“请输入算数表达式并以

    #

    结尾./n“);

    printf(“算数表达式:“);

    result(OPND,OPTR);

    }

    • 范文大全
    • 职场知识
    • 精美散文
    • 名著
    • 讲坛
    • 诗歌
    • 礼仪知识