本文最后更新于 2024年6月7日 下午
静态链表:
有时可以借助一维数组来表示线性链表
1 2 3 4 5 6 7 8
| #define MAXSIZE 1000 typedef struct { ElemType data; int cur; }component,Slinklist[MAXSIZE]
|
数组的一个分量表示一个结点,同时用游标(cur)代替指针指示结点在数组中的位置。在线性表的删除和插入操作时不需要移动元素,仅需要修改游标。
多项式计算:
简单的我们可以想到,用一维数组表示一个多项式,用数组的下标表示多项式中每一项的指数,用数组中每个位置上的值表示对应的系数。
但是这样存在一个问题:形如S(x) = 1 + 3x10000 – 2x20000
这样的多项式,指数项的值非常大,但非零项却非常少,导致一维数组浪费的空间很大。
为此我们可以用单链表来实现。在单链表中每个结点有两个数据项(系数项和指数项)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| typedef struct { float coef; int expn; } term, ElemType;
void AddPolyn (Polynomial &Pa, Polynomial &Pb)
{ ha = GetHead (Pa); hb = GetHead (Pb); qa = NextPos (Pa, ha); qb = NextPos (Pb, hb); while (qa && qb) { a = GetCurElem (qa); b = GetCurElem (qb); switch (*cmp(a, b)) { case -1: ha = qa; qa = NextPos (Pa, qa); break; case 0: sum = a.coef + b.coef; if (sum != 0.0) { SetCurElem (qa, sum); ha = qa; } else { DelFirst (ha, qa); FreeNode (qa); } DelFirst (hb, qb); FreeNode (qb); qb = NextPos (Pb, hb); qa = NextPos (Pa, ha); break; case 1: DelFirst (hb, qb); InsFirst (ha, qb); qb = NextPos (Pb, hb); ha = NextPos (Pa, ha); break; } } if (!ListEmpty (pb)) Append (Pa, qb); FreeNode (hb);
}
|