| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 239 人关注过本帖
标题:请高手帮我分析一下程序中的几个函数?
只看楼主 加入收藏
壁炉里瓦特数
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-10-23
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
请高手帮我分析一下程序中的几个函数?
下面一个用C编写的简单计算器的程序:
帮我重点分析一下函数push和pop,以及结构体在程序中期的作用?

#include <stdio.h> /*库函数*/
struct s_node { int data; struct s_node *next; };
typedef struct s_node s_list;
typedef s_list *link;
link operator=NULL;
link operand=NULL;
link push(link stack,int value)
{ link newnode;
    newnode=(link*) malloc(sizeof(s_list));
    if(!newnode)
    { printf("\nMemory allocation failure!!!");
      return NULL; }
    newnode->data=value;
    newnode->next=stack;
    stack=newnode;
    return stack; }
link pop(link stack,int *value)
{ link top;
    if(stack !=NULL)
    { top=stack; stack=stack->next; *value=top->data;
     free(top); return stack; }
    else *value=-1; }
int empty(link stack)
{ if(stack==NULL)
    return 1;
    else return 0; }
int is_operator(char operator)
{ switch (operator)
{ case '+': case '-': case '*': case '/': return 1; default:return 0; } }
int priority(char operator)
{ switch(operator)
    { case '+': case '-' : return 1; case '*': case '/' : return 2; default: return 0; } }
int two_result(int operator,int operand1,int operand2)
{ switch(operator)
    { case '+':return(operand2+operand1);
    case '-':return(operand2-operand1);
     case '*':return(operand2*operand1);
     case '/':return(operand2/operand1); }
}
void main()
{ char expression[50]; int position=0; int op=0; int operand1=0; int operand2=0; int evaluate=0;
printf("\nPlease input the inorder expression:");
gets(expression);
while(expression[position]!='\0'&&expression[position]!='\n')
{ if(is_operator(expression[position]))
    { if(!empty(operator))
        while(priority(expression[position])<= priority(operator->data)&& !empty(operator))
        {    operand=pop(operand,&operand1);
            operand=pop(operand,&operand2);
            operator=pop(operator,&op);
            operand=push(operand,two_result(op,operand1,operand2));
        }
        operator=push(operator,expression[position]); }
    else operand=push(operand,expression[position]-48);
    position++; }
while(!empty(operator))
{
    operator=pop(operator,&op);
    operand=pop(operand,&operand1);
    operand=pop(operand,&operand2);
    operand=push(operand,two_result(op,operand1,operand2));
}
operand=pop(operand,&evaluate);
printf("The expression [%s] result is '%d' ",expression,evaluate); getch(); }
搜索更多相关主题的帖子: 函数 
2009-10-23 20:45
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:20 
这程序太牛了!

离恨恰如春草,更行更远还生。
2009-10-23 20:47
快速回复:请高手帮我分析一下程序中的几个函数?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026087 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved