谁能帮我用c语言帮我写一个一元多项式程序。 10

有加减乘除。还要有注释。我们是数据结构要用的。谢谢了。(1)输入并建立多项式,用带表头结点的单链表存储多项式。(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,... 有加减乘除。还要有注释。我们是数据结构要用的。谢谢了。
(1) 输入并建立多项式,用带表头结点的单链表存储多项式。
(2) 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列。
(3) 多项式a和b相加,建立多项式a 、b,输出相加后的多项式。
(4) 多项式a和b相减,建立多项式a 、b,输出相减后的多项式。
这就是要求。乘除可以没有。。谢谢了
展开
 我来答
zyq_07_28
2008-12-12 · TA获得超过258个赞
知道小有建树答主
回答量:185
采纳率:0%
帮助的人:0
展开全部
我记得数据结构书上有源代码的啊......还是帮你写了一个,整整一个小时啊,累死我了

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

typedef struct _List List;
struct _List
{
int c;
int e;
List* next;
};

#define OPER_PLUS 0
#define OPER_MINUS 1

static List* list_oper(List* list1, List* list2, int oper);

/* order by e dec */
List* add_list(List* list, int c, int e);
void print_list_member(List* list);
List* list_plus(List* list1, List* list2);
List* list_minus(List* list1, List* list2);

List* list_plus(List* list1, List* list2)
{
return list_oper(list1, list2, OPER_PLUS);
}

List* list_minus(List* list1, List* list2)
{
return list_oper(list1, list2, OPER_MINUS);
}

static List* list_oper(List* list1, List* list2, int oper)
{
assert(list1 != NULL && list2 != NULL);

List* result_list = (List*) malloc(sizeof(List));
result_list->c = 0;
result_list->e = 0;

List* list1_temp = list1->next;
List* list2_temp = list2->next;

List* result_temp = result_list;
result_list->next = NULL;

while(list1_temp != NULL && list2_temp != NULL)
{
if(list1_temp->e != list2_temp->e)
{
List* add_list = (List*) malloc(sizeof(List));
add_list->next = NULL;

if(list1_temp->e > list2_temp->e)
{
add_list->e = list1_temp->e;
add_list->c = list1_temp->c;

list1_temp = list1_temp->next;
}
else
{
add_list->e = list2_temp->e;
add_list->c = list2_temp->c;

list2_temp = list2_temp->next;
}

result_temp->next = add_list;
result_temp = result_temp->next;
}
else
{
if(list1_temp->c + list2_temp->c != 0)
{
List* add_list = (List*) malloc(sizeof(List));
add_list->next = NULL;

add_list->e = list1_temp->e;
if(oper == OPER_PLUS)
{
add_list->c = list1_temp->c + list2_temp->c;
}
else
{
add_list->c = list1_temp->c - list2_temp->c;
}

result_temp->next = add_list;
result_temp = result_temp->next;
}

list1_temp = list1_temp->next;
list2_temp = list2_temp->next;
}
}/* end while */

while(list1_temp != NULL)
{
List* add_list = (List*) malloc(sizeof(List));
add_list->next = NULL;

add_list->e = list1_temp->e;
add_list->c = list1_temp->c;

result_temp->next = add_list;
result_temp = result_temp->next;
list1_temp = list1_temp->next;
}

while(list2_temp != NULL)
{
List* add_list = (List*) malloc(sizeof(List));
add_list->next = NULL;

add_list->e = list2_temp->e;
add_list->c = list2_temp->c;

result_temp->next = add_list;
result_temp = result_temp->next;
list2_temp = list2_temp->next;
}

return result_list;

}

void print_list_member(List* list)
{
assert(list != NULL);

List* print_list = list->next;
int count = 0;

while(print_list != NULL)
{
count++;
print_list = print_list->next;
}
printf("count = %d, ", count);

print_list = list->next;
count = 0;
while(print_list != NULL)
{
printf("c%d = %d, e%d = %d, ", count, print_list->c, count, print_list->e);
count++;
print_list = print_list->next;
}

printf("\n");
}

List* add_list(List* list, int c, int e)
{
assert(e > 0);

List* list_temp = NULL;
List* list_add = NULL;

/* create new node */
list_add = (List*)malloc(sizeof(List));
list_add->c = c;
list_add->e = e;

/* first add */
if(list == NULL)
{
/* create head */
list = (List*)malloc(sizeof(List));
list->c = 0;
list->e = 0;

list->next = list_add;
list_add->next = NULL;
return list;
}

list_temp = list->next;
List* equel_list = list;

while(list_temp != NULL)
{
assert(list_temp->e != e);

if(list_temp->e > e)
{
equel_list = list_temp;
list_temp = list_temp->next;

if(list_temp == NULL)
{
list_add->next = NULL;
equel_list->next = list_add;
return list;
}
}
else
{
list_add->next = list_temp;
equel_list->next = list_add;
return list;
}
}

return list;
}

int main()
{
/* test */
List* list1 = NULL;
List* list2 = NULL;
list1 = add_list(list1, 3, 2);
list1 = add_list(list1, 9, 4);
list1 = add_list(list1, 1, 5);
list1 = add_list(list1, -3, 1);
list1 = add_list(list1, -1, 9);

list2 = add_list(list2, 5, 2);
list2 = add_list(list2, 2, 3);
list2 = add_list(list2, -9, 8);
list2 = add_list(list2, 1, 9);
list2 = add_list(list2, -8, 5);

// print_list_member(list1);
// print_list_member(list2);

List* list3 = list_plus(list1, list2);
List* list4 = list_minus(list1, list2);

print_list_member(list3);
print_list_member(list4);

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式