初学数据结构六
1 Status ListMerge_L(LinkList &A, LinkList &B, LinkList &C) 2 { 3 LinkList pa, pb, qa, qb; 4 pa = A->next; 5 pb = B->next; 6 C = A; 7 while (pa && pb) 8 { 9 qa = pa; 10 qb = pb; 11 pa = pa->next; 12 pb = pb->next; 13 qb->next = qa->next; 14 qa->next = qb; 15 } 16 if (!pa) 17 qb->next = pb; 18 pb = B; 19 free(pb); 20 return OK; 21 } 22 23 Status ListMergeOppose_L(LinkLsit &A.LinkList &B, LinkList &C) 24 { 25 LinkList pa, pb, qa, qb; 26 pa = A; 27 pb = B; 28 qa = pa; 29 qb = pb; 30 pa = pa->next; 31 pb = pb->next; 32 A->next = NULL; 33 C = A; 34 while (pa && pb) 35 { 36 if (pa->data < pb->data) 37 { 38 qa = pa; 39 pa = pa->next; 40 qa->next = A->next; 41 A->next = qa; 42 } 43 else 44 { 45 qb = pb; 46 pb = pb->next; 47 qb->next = A->next; 48 A->next = qb; 49 } 50 } 51 while (pa) 52 { 53 qa = pa; 54 pa = pa->next; 55 qa->next = A->next; 56 A->next = qa; 57 } 58 while (pb) 59 { 60 qb = pb; 61 pb = pb->next; 62 qb->next = A->next; 63 A->next = qb; 64 } 65 pb = B; 66 free(pb); 67 return OK; 68 } 69 70 Status ListCross_Sq(SqList&A, SqList &B, SqList &C) 71 { 72 int i == , j = 0, k = 0; 73 while (i < A.length && j < B.length) 74 { 75 if (A.elem[i] < B.elem[j]) 76 i++; 77 else 78 if (A.elem[i] > B.elem[j]) 79 j++; 80 else 81 { 82 ListInsert_Sq(C, k, A.elem[i]); 83 i++; 84 k++; 85 } 86 } 87 return OK; 88 } 89 90 Status ListCross_L(LinkList &A, LinkList &B, LinkList &C) 91 { 92 LinkList pa, pb, qa, qb, pt; 93 pa = A; 94 pb = B; 95 qa = pa; 96 qb = pa; 97 pa = pa->next; 98 pb = pb->next; 99 C = A; 100 while (pa && pb) 101 { 102 if (pa->data < pb->data) 103 { 104 pt = pa; 105 pa = pa->next; 106 qa->next = pa; 107 free(pt); 108 } 109 else 110 if (pa->data > pb->data) 111 { 112 pt = pb; 113 pb = pb->next; 114 qb->next = pb; 115 free(pt); 116 } 117 else 118 { 119 qa = pa; 120 pa = pa->next; 121 } 122 } 123 while (pa) 124 { 125 pt = pa; 126 pa = pa->next; 127 qa->next = pa; 128 free(pt); 129 } 130 while (pb) 131 { 132 pt = pb; 133 pb = pb->next; 134 qb->next = qb; 135 free(pt); 136 } 137 pb = B; 138 free(pb); 139 return OK; 140 } 141 142 143 Status ListDivideInto2CL(LinkedPoly &L, LinkedPoly &L1) 144 { 145 LinkedPoly p, p1, q, pt; 146 q = L; 147 p = L->next; 148 p1 = L1; 149 while (p != L) 150 { 151 if(p->data.exp % 2 == 0)//.exp字段 152 { 153 pt = p; 154 p = p->next; 155 q->next = p; 156 pt->next = p1->next; 157 p1->next = pt; 158 p1 = p1->next; 159 } 160 else 161 { 162 q = p; 163 p = p->next; 164 } 165 } 166 return oK; 167 }
1 typedef struct 2 { 3 int coef; 4 int exp; 5 }PolyTerm; 6 7 typedef struct 8 { 9 PolyTerm *data; 10 int last; 11 }SqPoly; 12 13 Status PolyInit(SqPoly &L) 14 { 15 int i; 16 PolyTerm *p; 17 cout << "请输入多项式的项数:"; 18 cin >> L.last; 19 L.data = (PolyTerm*) malloc(L.last*sizeof(PolyTerm)); 20 if (!L.data) 21 return ERROR; 22 p = L.data; 23 for (i = 0; i < L.last; i++) 24 { 25 cout << "请输入系数:"; 26 cin >> p->coef; 27 cout << "请输入指数:"; 28 cin >> p->exp; 29 p++; 30 } 31 return OK; 32 } 33 34 double PolySum(SqPoly &L, double x0) 35 { 36 double Pn, x; 37 int i, j; 38 PolyTerm *p; 39 p = L.data; 40 for (i = 0, Pn = 0; i < L.last; i++, p++){ 41 for (j = 0, x = 1; j < p->exp; j++) 42 x = x*x0; 43 Pn = Pn + p->coef*x; 44 } 45 return Pn; 46 } 47 48 Status PolyMinus(SqPoly &L, SqPoly &L1, SqPoly &L2) 49 { 50 PolyTerm *p, *p1, *p2; 51 p = L.data; 52 p1 = L1.data; 53 p2 = L2.data; 54 int i = 0, j = 0, k = 0; 55 while (i < L1.last && j < L2.last) 56 { 57 if (p1->exp < p1->exp) 58 { 59 p->coef = p1->coef; 60 p++; k++; 61 p1++; i++; 62 } 63 else 64 if (p1->exp > p2->exp) 65 { 66 p->coef = p2->coef; 67 p->exp = p2->exp; 68 p++; k++; 69 p2++; j++; 70 } 71 else 72 { 73 if (p1->coef != p2->coef) 74 { 75 p->coef = (p1->coef) - (p2->coef); 76 p->exp = p1->exp; 77 p++; k++; 78 } 79 p1++; p2++; 80 i++; j++; 81 } 82 } 83 if (i<L1.last) 84 while (i < L1.last) 85 { 86 p->coef = p1->coef; 87 p->exp = p1->exp; 88 p++; k++; 89 p1++; i++; 90 } 91 if (j<L2.last) 92 while (j < L2.last) 93 { 94 p - coef = p2->coef; 95 p->exp = p2->exp; 96 p++; k++; 97 p2++; j++; 98 } 99 L.last = k; 100 return OK; 101 }