From b37d42d0e47c70d1335c4a8dd73c0d63f8817638 Mon Sep 17 00:00:00 2001 From: hao14293 Date: Wed, 1 May 2019 13:40:05 +0800 Subject: [PATCH] =?UTF-8?q?Create=2002-=E7=BA=BF=E6=80=A7=E7=BB=93?= =?UTF-8?q?=E6=9E=842=20=E4=B8=80=E5=85=83=E5=A4=9A=E9=A1=B9=E5=BC=8F?= =?UTF-8?q?=E7=9A=84=E4=B9=98=E6=B3=95=E4=B8=8E=E5=8A=A0=E6=B3=95=E8=BF=90?= =?UTF-8?q?=E7=AE=97=20(20=20=E5=88=86).cpp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...277\220\347\256\227 (20 \345\210\206).cpp" | 196 ++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 "ZJU_MOOC_\346\225\260\346\215\256\347\273\223\346\236\204/02-\347\272\277\346\200\247\347\273\223\346\236\2042 \344\270\200\345\205\203\345\244\232\351\241\271\345\274\217\347\232\204\344\271\230\346\263\225\344\270\216\345\212\240\346\263\225\350\277\220\347\256\227 (20 \345\210\206).cpp" diff --git "a/ZJU_MOOC_\346\225\260\346\215\256\347\273\223\346\236\204/02-\347\272\277\346\200\247\347\273\223\346\236\2042 \344\270\200\345\205\203\345\244\232\351\241\271\345\274\217\347\232\204\344\271\230\346\263\225\344\270\216\345\212\240\346\263\225\350\277\220\347\256\227 (20 \345\210\206).cpp" "b/ZJU_MOOC_\346\225\260\346\215\256\347\273\223\346\236\204/02-\347\272\277\346\200\247\347\273\223\346\236\2042 \344\270\200\345\205\203\345\244\232\351\241\271\345\274\217\347\232\204\344\271\230\346\263\225\344\270\216\345\212\240\346\263\225\350\277\220\347\256\227 (20 \345\210\206).cpp" new file mode 100644 index 0000000..f1ae836 --- /dev/null +++ "b/ZJU_MOOC_\346\225\260\346\215\256\347\273\223\346\236\204/02-\347\272\277\346\200\247\347\273\223\346\236\2042 \344\270\200\345\205\203\345\244\232\351\241\271\345\274\217\347\232\204\344\271\230\346\263\225\344\270\216\345\212\240\346\263\225\350\277\220\347\256\227 (20 \345\210\206).cpp" @@ -0,0 +1,196 @@ +#include + +typedef int element; +typedef struct Node +{ + element coef; + element exp; + struct Node *Next; +}node; +using namespace std; + +node *Read(); +node *Add(node *L1, node *L2); +node *Mult(node *L1, node *L2); +void Print(node *L); +node *Insert(node *p, element c, element e); + +int main() +{ + node *L1, *L2, *L3, *L4; + L1 = Read(); + L2 = Read(); + L4 = Mult(L1, L2); + L3 = Add(L1, L2); + + Print(L4); + Print(L3); + + return 0; +} + +node * Read() +{ + node *p; + node *phead = new node; + phead->Next = NULL; + p = phead; + int n, i = 0; + cin >> n; + + while (i < n) + { + node *pNew = new node; + cin >> pNew->coef >> pNew->exp; + pNew->Next = NULL; + p->Next = pNew; + p = pNew; + i++; + } + return phead; +} + +node *Add(node *L1, node *L2) +{ + node *phead = new node; + node *p1 = L1->Next; + node *p2 = L2->Next; + node *p3 = phead; + phead->Next = NULL; + + while (p1 && p2) + { + node *t1, *t2; + if (p1->exp == p2->exp) + { + t1 = p1; + t2 = p2; + t1->coef = p1->coef + p2->coef; // list L1 as the new list L3's template; + if (t1->coef != 0) + { + p3->Next = t1; + p3 = t1; + p1 = p1->Next; + p2 = p2->Next; + p3->Next = NULL; + delete t2; + } + else + { + p1 = p1->Next; + p2 = p2->Next; + delete t1; + delete t2; + } + } + else if (p1->exp > p2->exp) + { + p3->Next = p1; + p3 = p1; + p1 = p1->Next; + p3->Next = NULL; + } + else + { + p3->Next = p2; + p3 = p2; + p2 = p2->Next; + p3->Next = NULL; + } + + } + + if (p1) + p3->Next = p1; + if (p2) + p3->Next = p2; + + L1->Next = NULL; + L2->Next = NULL; + + return phead; +} + +void Print(node *L) +{ + node *p = L->Next; + if (!p) + cout << "0 0" << endl; + while (p) + { + if (p->Next != NULL) + cout << p->coef << ' ' << p->exp << ' '; + else + cout << p->coef << ' ' << p->exp << endl; + p = p->Next; + } + return; +} + +node *Mult(node *L1, node *L2) //key: insert list p3 by every node; +{ + element c, e; + node *phead = new node; + phead->Next = NULL; + node *p1 = L1->Next; + node *p2 = L2->Next; + node *p3 = phead; + + if (!p1 || !p2) + return phead; //not 'NULL'; + + while (p2) + { + node *pNew = new node; + p3 = Insert(p3, p1->coef * p2->coef, p1->exp + p2->exp); + p2 = p2->Next; + } + + p1 = p1->Next; + node *t; + while (p1) + { + p2 = L2->Next; + p3 = phead->Next; + while (p2) + { + c = p1->coef * p2->coef; + e = p1->exp + p2->exp; + while (p3->Next && p3->Next->exp > e) + p3 = p3->Next; + + if (p3->Next && p3->Next->exp == e) + { + if (p3->Next->coef + c != 0) + p3->Next->coef += c; + else + { + t = p3->Next; + p3->Next = t->Next; + delete t; + } + } + else + { + p3 = Insert(p3, c, e); + } + + p2 = p2->Next; + } + + p1 = p1->Next; + } + + return phead; +} + +node *Insert(node *p, element c, element e) +{ + node *t = new node; + t->coef = c; + t->exp = e; + t->Next = p->Next; + p->Next = t; + + return t; +}