
谁能帮我用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,输出相减后的多项式。
这就是要求。乘除可以没有。。谢谢了 展开
(1) 输入并建立多项式,用带表头结点的单链表存储多项式。
(2) 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列。
(3) 多项式a和b相加,建立多项式a 、b,输出相加后的多项式。
(4) 多项式a和b相减,建立多项式a 、b,输出相减后的多项式。
这就是要求。乘除可以没有。。谢谢了 展开
1个回答
展开全部
我记得数据结构书上有源代码的啊......还是帮你写了一个,整整一个小时啊,累死我了
#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);
}
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询