数据结构,C语言实现四则运算
来源:互联网 发布:淘宝材质成分是真的吗 编辑:程序博客网 时间:2024/05/01 01:31
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "math.h"
#include "assert.h"
struct element
{
int data;
char ch;
struct element *next;
};
#define CHARSTACKSIZE 256
char charstack[CHARSTACKSIZE];
int top = -1;
#define INTSTACKSIZE 256
char intstack[INTSTACKSIZE];
int int_top = -1;
int charstackIsFull( void )
{
if( top==(CHARSTACKSIZE-1) )
{
printf("charstack is full/n");
return 1;
}
else
{
return 0;
}
}
int charstackIsEmpty( void )
{
if( -1==top )
{
printf("charstack is empty/n");
return 1;
}
else
{
return 0;
}
}
void charStackPush( char ch )
{
assert( !charstackIsFull() );
charstack[++top] = ch;
}
char charStackPop( void )
{
assert( !charstackIsEmpty() );
return charstack[top--];
}
int intstackIsFull( void )
{
if( int_top==(INTSTACKSIZE-1) )
{
printf("intstack is full/n");
return 1;
}
else
{
return 0;
}
}
int intstackIsEmpty( void )
{
if( int_top==(-1) )
{
printf("intstack is empty/n");
return 1;
}
else
{
return 0;
}
}
void intStackPush( int data )
{
assert( !intstackIsFull() );
intstack[++int_top] = data;
}
int intStackPop( void )
{
assert( !intstackIsEmpty() );
return intstack[int_top--];
}
int charIsDigit( char ch )
{
if( ch>='0'&&ch<='9' )
{
return 1;
}
else
{
return 0;
}
}
int isp( char ch )
{
int pri;
switch(ch)
{
case '#':
pri = 0;
break;
case '(':
pri = 1;
break;
case '^':
pri = 7;
break;
case '*':
case '/':
case '%':
pri = 5;
break;
case '+':
case '-':
pri = 3;
break;
case ')':
pri = 8;
break;
default:
assert(0);
}
return pri;
}
int icp( char ch )
{
int pri;
switch(ch)
{
case '#':
pri = 0;
break;
case '(':
pri = 8;
break;
case '^':
pri = 6;
break;
case '*':
case '/':
case '%':
pri = 4;
break;
case '+':
case '-':
pri = 2;
break;
case ')':
pri = 1;
break;
default:
assert(0);
}
return pri;
}
int main( void )
{
char infix[256] = "12+8*(18-18)*3-88/4#";
char *pInfix = NULL;
int temp;
int flag;
char ch,y;
int left;
int right;
struct element *head = NULL;
struct element *p1 = NULL;
struct element *p2 = NULL;
printf("Gdq Test!!!/n");
pInfix = infix;
p1 = p2 = (struct element *)malloc(sizeof(struct element));
ch = *pInfix;
charStackPush('#');
while(ch!='#')
{
temp = 0;
flag = 0;
while( charIsDigit(ch) )
{
temp *= 10;
temp += *pInfix-'0';
pInfix++;
ch = *pInfix;
flag = 1;
}
if( 1==flag )
{
p1->data = temp;
p1->ch = '!';
if( NULL==head )
{
head = p1;
}
else
{
p2->next = p1;
}
p2 = p1;
p1 = (struct element *)malloc(sizeof(struct element));
}
else if( ')'==ch )
{
for( y = charStackPop() ; y!='(' ; y = charStackPop() )
{
p1->data = 0;
p1->ch = y;
if( NULL==head )
{
head = p1;
}
else
{
p2->next = p1;
}
p2 = p1;
p1 = (struct element *)malloc(sizeof(struct element));
}
pInfix++;
ch = *pInfix;
}
else
{
for( y = charStackPop() ; isp(y)>icp(ch) ; y = charStackPop() )
{
p1->data = 0;
p1->ch = y;
if( NULL==head )
{
head = p1;
}
else
{
p2->next = p1;
}
p2 = p1;
p1 = (struct element *)malloc(sizeof(struct element));
}
charStackPush(y);
charStackPush(ch);
pInfix++;
ch = *pInfix;
}
}
while(!charstackIsEmpty())
{
y = charStackPop();
p1->data = 0;
p1->ch = y;
if( NULL==head )
{
head = p1;
}
else
{
p2->next = p1;
}
p2 = p1;
p1 = (struct element *)malloc(sizeof(struct element));
}
p2->next = NULL;
for( p1 = head ; p1->next!=NULL ; p1 = p1->next )
{
printf("%d %c/n",p1->data,p1->ch);
}
for( p1 = head ; p1->next!=NULL ; p1 = p1->next )
{
switch( p1->ch )
{
case '+':
right = intStackPop();
left = intStackPop();
temp = left+right;
intStackPush(temp);
break;
case '-':
right = intStackPop();
left = intStackPop();
temp = left-right;
intStackPush(temp);
break;
case '*':
right = intStackPop();
left = intStackPop();
temp = left*right;
intStackPush(temp);
break;
case '/':
right = intStackPop();
left = intStackPop();
temp = left/right;
intStackPush(temp);
break;
case '!':
intStackPush(p1->data);
break;
default:
assert(0);
}
}
printf("/n%d/n",intStackPop());
return 0;
}
- 数据结构,C语言实现四则运算
- C语言实现四则运算
- 数据结构(基于C语言) 简单四则运算
- <DataStructure_1>用栈实现四则运算(c语言)
- C语言实现 加减乘除四则运算(小数)
- C语言 实现四则运算简单计算器
- 带括号的四则运算C语言实现
- C语言实现四则运算(小型计算器)
- C语言实现矩阵的四则运算
- C语言:用栈实现四则运算
- C语言数据结构----栈的应用(四则运算)
- 数据结构栈实现四则运算
- 数据结构——c语言描述 第三章 (2)栈的练习(四则运算的实现)
- 四则运算(C语言)
- C语言编译四则运算
- c语言加减乘除, 四则运算
- 数据结构(C语言实现)
- 数据结构C语言实现
- 在BlackBerry上播放音频
- 实模式下,cpu真的只能寻址1M的地址空间吗?
- position:fixed的解决办法!
- Gate A20与保护模式
- JAVA别名问题----JAVA程序需要注意的对象引用
- 数据结构,C语言实现四则运算
- [转]泡沫破裂的经济学
- 动态库
- Microsoft SQL Server 2005 还原数据库的方法(图)
- 数据类型转换的总结
- Windows CE、pocket PC和SmartPhone三个系统有什么区别?
- 关于A20 Gate
- 初来乍到
- 每天一剂Ext良药(二)