设为首页 加入收藏

TOP

C算法与数据结构-线性表的应用,多项式求和---ShinePans(一)
2015-01-22 21:34:24 来源: 作者: 【 】 浏览:125
Tags:算法 数据结构 线性 应用 多项 求和 ---ShinePans
/*---上机作业作业,二项式加法---*/
/*---By 潘尚 ---*/
/*---日期: 2014-5-8 . ---*/
/*---题目:---*/
//假设有两个稀疏多项式A和B,设计算法完成下列任务
//1.输入并建立多项式A和B;
//2.求两个多项式的和多项式C;
//3.求两个多项式的积多项式D;
//输出4个多项式A,B,C,D;
#include 
  
   
#include 
   
     #include 
    
      typedef struct Node{ float A; //系数 int m; //指数 struct Node *next; }LNode, *LinkList; //链表类型,若采用嵌套结构体如何用->以指针的方式访问 void Initialize(LNode *plist); LinkList PolyAdd(LNode *plist1, LNode *plist2); int Cmp(int a, int b); void Append(LNode *pa, LNode *pb); int ListIsEmpty(const LinkList *plist); void EmptyTheList(LNode *plist); void PrintList(LNode *plist); void PolySort(LNode *plist); int GetLength(LNode *plist); void PolyMerge(LNode *plist); float Hornoreva luate(LNode *plist, float x); LinkList PolyMultiply(LNode *plist1, LNode *plist2); int GetMaxExpn(LNode *plist); /** *主函数 */ int main(void) { LNode *p1 = (LNode*)malloc(sizeof(LNode)); LNode *p2 = (LNode*)malloc(sizeof(LNode)); LNode *result1 = (LNode*)malloc(sizeof(LNode)); LNode *result2 = (LNode*)malloc(sizeof(LNode)); Initialize(p1); Initialize(p2); PolySort(p1); //多项式排序 PolySort(p2); printf("\np1 = "); PrintList(p1); printf("\np1(value) = %f", Hornoreva luate(p1, 2)); printf("\np2 = "); PrintList(p2); printf("\np2(value) = %f", Hornoreva luate(p2, 2)); result1 = PolyAdd(p1, p2); result2 = PolyMultiply(p1, p2); //printf("\n%d",GetLength(p1)); //PolyMerge(p1); //合并同类项 //UnitePoly(p1); //合并同类项 //EmptyTheList(p1); printf("\np1 + p2 = "); PrintList(result1); printf("\np1 * p2 = "); PrintList(result2); getchar(); getchar(); return 0; } /** *Operation: 初始化一个多项式 *Precondition: *Postcondition: */ void Initialize(LNode *plist) { int i, n; float c; int e; LNode *prev = NULL, *current = NULL; plist->next = NULL; prev = plist; printf("\nPlease input the length of the polynomial: "); scanf_s("%d", &n); plist->A = 0; plist->m = n; //链表长度 printf("Please input the coefficient and the exponent of each term: \n"); for (i = 1; i <= n; i++) { current = (LNode*)malloc(sizeof(LNode)); scanf_s("%2f%d", &c, &e); current->A = c; current->m = e; prev->next = current; prev = current; /*plist->next = current; plist = current;*/ } current->next = NULL; PolySort(plist); } /** *Operation: 将两个多项式相加 *Precondition: *Postcondition: *Notes: 可以采用先将两多项式合并(拼接)后再合并同类项来实现相加 */ LinkList PolyAdd(LNode *plist1, LNode *plist2) { LNode *pa, *pb; LNode *result = (LNode*)malloc(sizeof(LNode)); int a, b; result->next = NULL; LNode *r = result; pa = plist1->next; pb = plist2->next; while (pa && pb) { LNode *current = (LNode*)malloc(sizeof(LNode)); a = pa->A; b = pb->m; switch (Cmp(a, b)){ case -1: current->A= pa->m; current->A = pa->m; pa = pa->next; break; case 0: current->A = pa->A + pb->A; current->m = pa->m; pa = pa->next; pb = pb->next; break; case 1: current->A = pb->A; current->m = pb->m; pb = pb->next; break; } r->next = current; r = r->next; //结果多项式指针后移 current->next = NULL; } if (!pa || !pb) { if (!pa) Append(r, pb); if (!pb) Append(r, pa); } //free(current); return result; } /** *比较两整数大小 */ int Cmp(int a, int b) { if (a>b) return 1; if (a
     
      A= p->A; current->m = p->m; p = p->next; r->next = current; //SEGIVE current->next = NULL; } } /** *Operation: 判断多项式是否为空 */ int ListIsEmpty(const LinkList *plist) { if (*plist == NULL) return 1; else return 0; } /** *Operation: 清空一个多项式链表 *Precondition:plist指向一个多项式列表 *Postcondition:该列表被清空并释放 */ void EmptyTheList(LNode *plist) { LNode *psave; while (plist != NULL) { psave = plist->next; free(plist); plist = psave; } } /** *Operation: 输出一个多项式链表 */ void PrintList(LNode *plist) { LNode *p = plist; p = p->next; //跳过头指针 while (p !
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言基础知识之综合案例(1) 下一篇邻接矩阵有向图(一)之 C语言详解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: