题目:用单链表实现任意两个一元多项式的加、减法运算

题目:用单链表实现任意两个一元多项式的加、减法运算任务:编程实现以下功能:①分别输入一元多项式pn(x)和Qn(x)。从键盘输入一元多项式中各项的系数和指数,并用单链表加... 题目:用单链表实现任意两个一元多项式的加、减法运算
任务:编程实现以下功能:
① 分别输入一元多项式pn (x)和Q n(x)。
从键盘输入一元多项式中各项的系数和指数,并用单链表加以表示。
② 分别对一元多项式pn (x)和Q n(x)进行升幂排序。
将一元多项式中各子项按照指数从小到大的顺序排序。
③ 分别输出一元多项式pn (x)和Q n (x)。
将用单链表表示的一元多项式输出,即打印多项式的系数和指数。
④ 任意输入一个实数x0,分别求出一元多项式pn (x0)和Q n(x0)的值。
⑤ 已知有两个一元多项式分别为Pn (x)和Qn (x),求出两个多项式的和
R n (x)和差T n (x),分别用单链表表示R n (x)和T n (x),并将二者输出,
(R n (x)=P n (x)+Q n (x),T n (x)=P n (x)-Q n (x))
要求:
① 根据以上功能需求,自己定义单链表结点的存储结构;
② 提供友好的用户界面,方便用户操作。
展开
 我来答
搏唧q
推荐于2016-12-01 · TA获得超过163个赞
知道答主
回答量:109
采纳率:50%
帮助的人:47.2万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 7
typedef enum { add, nul, sub, div1, yu, l, r }OP;
int a[N][N] = {
{ 0, 0, -1, -1, -1, 1, 2 },
{ 0, 0, -1, -1, -1, 1, 2 },
{ 1, 1, 0, 0, 0, 1, 2 },
{ 1, 1, 0, 0, 0, 1, 2 },
{ 1, 1, 0, 0, 0, 1, 2 },
};

int top;
OP beg;
int b[1024];
OP op[1024];

void init_nu( ){ top = 0; }
void push_nu( int term ){ b[top++] = term; }
int pop_nu( ){ return b[--top]; }
int is_empty_nu( ){ return top == 0; }
void destory_nu( ) { top = 0; }

void init_sign( ){ beg = 0; }
void push_sign( OP sign ){ op[beg++] = sign; }
void destory_sign( ){ beg = 0; }
OP pop_sign( ){ return op[--beg];}
OP get_sign( ){ return op[beg - 1]; }
int is_empty_sign( ){return beg == 0; }
int eval()
{
int i, j;
i = pop_nu();
j = pop_nu();
switch( pop_sign() )
{
case '+': push_nu( j + i ); break;
case '-': push_nu( j - i ); break;
case '*': push_nu( j * i ); break;
case '/': push_nu( j / i ); break;
case '%': push_nu( j & i ); break;
defult: break;
}
}
int change( char *s )
{
int i;
int n = strlen( s );
for( i = 0; i < n; i++ )
{
if( s[i] >= '0' && s[i] <= '9' )
push_nu( 0 );
while( s[i] >= '0' && s[i] <= '9' )
push_nu( 10 * pop_nu() + s[i++] - '0' );
switch( s[i] )
{
case '+': while( a[add][get_sign()] <= 0 )

eval();
push_sign( add ); break;
case '-': while( a[nul][get_sign()] <= 0 )
eval();
push_sign( nul ); break;
case '*': while( a[sub][get_sign()] <= 0 )
eval();
push_sign( sub ); break;
case '/': while( a[div1][get_sign()] <= 0 )
eval();
push_sign( div1 ); break;
case '%': while( a[yu][get_sign()] <= 0 )
eval();
push_sign( yu ); break;
case '(': push_sign( l ); break;
case ')': while( (get_sign()) != l )
eval();
pop_sign();
break;
defult: break;
}

}
return pop_nu();
}
int main( void )
{
char *s = "((5-3)*2+4/2&2+1)";
init_nu();
init_sign();
printf( "%d\n", change( s ));
destory_nu();
destory_sign();
return 0;
}

以前编的,希望对你有帮助。

别忘了给我分。
追问
而且不是单链表做的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式