頭文件:
polyn.h
/* * polyn.h */ #ifndef POLYN_H_ #define POLYN_H_ typedef int ElemType; typedef struct polynnode { ElemType coef; ElemType expn; struct polynnode *next; } polyn; #define NODESZ sizeof(polyn) polyn *InitPolyn(polyn *L); polyn *CreatePolyn(polyn *L, ElemType coefarr[], ElemType expn[], int n); polyn *InsertPolyn(polyn *L, const int i, const ElemType coef, const ElemType expn); polyn *DeletePolyn(polyn *L, const int i, ElemType *coef, ElemType *expn); int PrintPolyn(const polyn *L); polyn *AddPolyn(polyn *pa, polyn *pb); polyn *AddPolynEx(polyn *pa, polyn *pb); #endif /* POLYN_H_ */
實現源代碼:
polyn.c
/* * polyn.c */ #include <stdio.h> #include <stdlib.h> #include "polyn.h" polyn *InitPolyn(polyn *L) { L = (polyn *) malloc(NODESZ); if (NULL == L) { printf("ERROR: New allocate failed!/n"); return NULL; } L->next = NULL; return L; } // expn ascend polyn *CreatePolyn(polyn *L, ElemType coefarr[], ElemType expnarr[], int n) { if (NULL == L) { printf("ERROR: The polyn is NULL!/n"); return NULL; } int i; polyn *r = L; polyn *s; for (i = 0; i < n; ++i) { s = (polyn *) malloc(NODESZ); s->coef = coefarr[i]; s->expn = expnarr[i]; r->next = s; r = s; } r->next = NULL; return L; } polyn *InsertPolyn(polyn *L, const int i, const ElemType coef, const ElemType expn) { if (NULL == L) { printf("ERROR: The polyn is NULL!/n"); return NULL; } int j = 0; polyn *p = L; while (p != NULL && j < i - 1) { p = p->next; j++; } if (NULL == p || j > i - 1) { printf("ERROR: The position is invalid!/n"); return L; } polyn *s = (polyn *) malloc(NODESZ); s->coef = coef; s->expn = expn; s->next = p->next; p->next = s; return L; } polyn *DeletePolyn(polyn *L, const int i, ElemType *coef, ElemType *expn) { polyn *p = L; int j = 0; while (p->next != NULL && j < i - 1) { p = p->next; j++; } if (NULL == p->next || j > i - 1) { printf("ERROR: The position is invalid!/n"); return L; } polyn *q = p->next; *coef = q->coef; *expn = q->coef; p->next = q->next; free(q); return L; } int PrintPolyn(const polyn *L) { if (NULL == L) { printf("ERROR: The polyn is NULL!/n"); return -1; } polyn *p = L->next; while (p != NULL) { printf("%dx^%d ", p->coef, p->expn); p = p->next; } printf("/n"); return 0; } polyn *AddPolyn(polyn *pa, polyn *pb) { polyn *p = pa->next; polyn *q = pb->next; polyn *pc = pa; polyn *pre = pa; polyn *u = NULL; ElemType x; while (p != NULL && q != NULL) { if (p->expn < q->expn) { pre = p; p = p->next; } else if (p->expn > q->expn) { u = q->next; q->next = p; pre->next = q; pre = q; q = u; } else if (p->expn == q->expn) { x = p->coef + q->coef; if (x != 0) { p->coef = x; pre = p; } else { pre->next = p->next; free(p); } p = pre->next; u = q; q = q->next; free(u); } }//end while if (q != NULL) { pre->next = q; free(pb); } return pc; } polyn *AddPolynEx(polyn *pa, polyn *pb) { polyn *r = pa; polyn *s = pb; polyn *u = NULL; ElemType x; while (r->next != NULL && s->next != NULL) { if (r->next->expn < s->next->expn) { r = r->next; } else if (r->next->expn > s->next->expn) { u = s->next; s->next = u->next; u->next = r->next; r->next = u; r = u; } else if (r->next->expn == s->next->expn) { x = r->next->coef + s->next->coef; if(x!=0) { r->next->coef=x; r=r->next; } else { u=r->next; r->next=u->next; free(u); } u=s->next; s->next=s->next->next; free(u); } }//end while if(s->next!=NULL) { r->next=s->next; free(pb); } return pa; }
測試主程序:
Polynomial.c
/* ============================================================================ Name : Polynomial.c Author : Version : Copyright : Copyright@DK Description : Hello World in C, Ansi-style ============================================================================ */ #include <stdio.h> #include <stdlib.h> #include "polyn.h" int main(void) { int coef1[] = { 1, 2, 3, 4, 5, 1 }; int expn1[] = { 0, 2, 5, 6, 7, 12 }; int coef2[] = { 3, 1, 2, 1, -4, 1, 1 }; int expn2[] = { 0, 1, 3, 4, 6, 8, 13 }; polyn *pa; pa = InitPolyn(pa); pa = CreatePolyn(pa, coef1, expn1, 6); PrintPolyn(pa); polyn *pb; pb = InitPolyn(pb); pb = CreatePolyn(pb, coef2, expn2, 6); PrintPolyn(pb); printf("================/n"); polyn *pc=NULL; pc=AddPolyn(pa,pb); PrintPolyn(pc); printf("================/n"); polyn *pa2; pa2 = InitPolyn(pa2); pa2 = CreatePolyn(pa2, coef1, expn1, 6); PrintPolyn(pa2); polyn *pb2; pb2 = InitPolyn(pb2); pb2 = CreatePolyn(pb2, coef2, expn2, 6); PrintPolyn(pb2); printf("================/n"); polyn *pd=NULL; pd=AddPolynEx(pa2,pb2); PrintPolyn(pd); printf("================/n"); return EXIT_SUCCESS; }
二叉平衡查找樹AVL詳解 看懂這篇文章所需的知識點 樹、二叉搜索樹、樹高、樹深、層等概念 AVL樹 概念:任意節點的左右子樹的高度差不能大於1的樹即爲AVL樹,是爲了解決在頻繁插入刪除等動態更新下出現的時間複雜度退化的問題,所以平
雲棲號資訊:【點擊查看更多行業資訊】在這裏您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來! 之前本人在找工作面試時在Redis相關問題上可栽了跟頭。在面試前按常規套路準備了一下,比如 Redis 的常用5種數據結構,Redis持久化
AVL樹旋轉原理和簡易實現 二叉搜索樹雖然可以提高搜索效率,但是如果插入的數據有序時很有可能變成單支,如果變成單支樹的時候,那麼查找時效率也不高了。因此引入AVL樹。 AVL樹是當向這棵樹插入節點的時候,要保證每個節點的左右子樹的
紅黑樹的旋轉原理和模擬實現 我們瞭解到AVL樹雖然效率很高,但是它是通過多次的旋轉纔到達一個絕對的平衡,旋轉的消耗其實也很大。因此開始引入近似平衡的一棵樹----紅黑樹(RBTree)。紅黑樹每一個節點不是紅色的就是黑色的,它保證
1.給定100億個整數,設計算法找到只出現一次的整數? ①方法一 100億個整數就是400億個字節,42億九千萬是4G,那麼1G就是10億字節,所以要存下100億個整數需要40G的內存空間。因此我們採用位圖100億個整數大概就是1
布隆過濾器 假如現在有40億個ip地址(string類型),然後給你一個ip地址,讓你查找這個ip地址在不在這40億個ip地址裏?我們應該怎麼做呢? 如果用哈希表來處理的話,這裏有40億的數據,數據量太大,因此太佔用空間 如果用
————————————————18.4.18更新有時我們會遇到這樣的問題:在一棵樹上,每次詢問兩點間路徑上的和或者是最值。但我們用搜索時,時間就會到O(n),這樣根本就完不成算法。但樹上剖分就可以縮短修改的時間。樹上剖分的算法簡介我們定
request作爲前後臺交換的橋樑,有重要作用。 request常用的方法有讀參數:public String getParameter(String paramName);讀取屬性public Object getAttribut
1.非空二叉樹的高度 1.1非遞歸算法實現求解非空二叉樹的高度 算法思想:採用層次遍歷的算法,設置變量level記錄當前結點所在的層數,設置變量last指向當前層的最右的結點,每次層次遍歷出隊的時候與last指針比較(fron
考研加油!!!!!!! 1.1樹的重要概念 1.樹是一種重要的非線性結構;在有n個結點的樹中有n-1條邊; 2.在結點個數爲n(n>1)的各棵樹中,深度最小的樹的深度是多少?它有多少葉子結點?多少分支結點?深度最大的樹的深度是多少?它有多
使用stringstream http://blog.csdn.net/xw20084898/article/details/21939811 stringstream 是 C++ 提供的另一個字串型的串流(stream)
1.什麼是線性結構 線性結構是一種有序數據項的集合,其中每個數據項都有唯一的前驅和後繼(除了第一個沒有前驅,最後一個沒有後繼)。新的數據項加入到數據集中時,只會加入到原有某個數據項之前或之後。具有這種性質的數據集,就稱爲線性結構。
一、Trie的介紹: 1、主要應用場景:搜索引擎的自動補全功能:Trie樹+詞頻(概率)權重因子 IP路由:最長前綴匹配,Trie路由算法
先總結有序數組,無序的後面再總結。。 1.以空間換時間法。 算法思想:目標數組array[length],是一個有序數組,比如int array[]={1,1,2,2,4,4,4,4,4,5,5,6,10};總共有13個元素,
數組求和 方法一:直接一次for循環 int GetSum1(int *a,int n) { int sum=0; for (int i=0; i<n;i++) { sum+=a[i];