第二章 线性表.docx
《第二章 线性表.docx》由会员分享,可在线阅读,更多相关《第二章 线性表.docx(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二章线性表Status DeleteK(SqList &a,int i,int k)删除线性表a中第i个元素起的k个元素 (return OK;/DeleteKStatus Insert_SqList(SqList &va,int x)把 x 插入递增有序表 va 中return OK;/Insert_SqListint ListComp(SqList A,SqList B)比较字符表A和B,并用返回值表示结果,值为正, 表示AB;后为负,表示AvB;值为零,表示A=Breturn 0;/ListCompLNode* Locate(LinkList LJnt x)链表上的元素查找,返回指针(
2、for(p=l-next;p&p-data!=x;p=p-next);return p;/Locateint Length(LinkList L)求链表的长度(for(k=0,p=L;p-next;p=p-next,k+);return k;/Lengthvoid ListConcat(LinkList ha,LinkList hb,LinkList &hc)把链表 hb 接在 ha 后面形成链表he) 此时P指向最后一个奇数结点if(p-next=L) p-next=L-pre-pre;else p-next=l-pre;p=p-next; /此时p指向最后一个偶数结点while(p-pre
3、-pre! =L) (p-next=p-pre-pre;p=p-next;)p-next=L;按题目要求调整了 next链的结构,此时pre链仍为原状 for(p=L;p-next!=L;p=p-next) p-next-pre=p;/OEReform分析:next链和pre链的调整只能分开进行.如同时进行调整的话,必须使用堆栈保 存偶数结点的指针,否则将会破坏链表结构,造成结点丢失.DuLNode * Locate_DuList(DuLinkedList &L,int x)带 freq 域的双向循环链表上的 查找if(p=L) return NULL; 没找至Up-freq+;q=p-pre
4、;while(q-freqfreq) q=q-pre; 查找插入位置if(q!=p-pre)(p-pre-next=p-next;p-next-pre=p-pre;q-next-pre=p;p-next=q-next;qnext=p;p-pre=q; 调整位置)return p;/Locate_DuListfloat GetValue_SqPoly(SqPoly P,int x0)求升幕顺序存储的稀疏多项式的值 |Poly Term *q;sum=0;ex=0;while(q-coef)(while(exexp) xp*=xO;sum+=q-coef*xp;q+;return sum;/Get
5、Value_SqPolyvoid Subtract_SqPoly(SqPoly Pl,SqPoly P2,SqPoly &P3)求稀疏多项式Pl 减P2 的差式P3(Poly Term *p,*q,*r;Create_SqPoly(P3); /建立空多项式 P3while(p-coef&q-coef)(if(p-expexp)(r-coef=p-coef;r-exp=p-exp;p+;r+;else if(p-expexp)(r-coef-q-coef;r-exp=q-exp;q+;r+;)elseif(p-coef-q-coef)!=0) /只有同次项相减不为零时才需要存入P3中(r-coe
6、f=p-coef-q-coef;r-exp=p-exp;r+;/ifp+;q+;/else/whilewhile(p-coef) 处理Pl或P2的剩余项(r-coef=p-coef;r-exp=p-exp;p+;r+;)while(q-coef)(r-coef=-q-coef;r-exp=q-exp;q+;r+;/Subtract_SqPoly void QiuDao_LinkedPoly(LinkedPoly &L)对有头结点循环链表结构存储的稀疏 多项式L求导(P=L-next;L-next=p-next;p=p-next; /跳过常数项)while(p!=L)(p=p-next;)/Qi
7、uDao_LinkedPolyvoid Divide_LinkedPoly(LinkedPoly &L,&A,&B)把循环链表存储的稀疏多项式L拆成只含奇次项的A和只含偶次项的B(p=L-next;A=(PolyNode*)malloc(sizeof(PolyNode);B=(PolyNode*)malloc(sizeof(PolyNode);pa=A;pb=B;while(p!=L)pa-next=p;pa=p;)else(pb-next=p;pb=p;)p=p-next;/whilepa-next=A;pb-next=B;/Divide_I Jn kedPol yhc=ha;p=ha;wh
8、ile(p-next) p=p-next;p-next=hb;/ListConcat见书后答案.Status Insert(LinkList &L,int i,int b)在无头结点链表L的第i个元素之前插入元素 b (p=L;q=(LinkList*)malloc(sizeof(LNode);if(i=l)()else(while(il) p=p-next;q-next=p-next;p-next=q; /插入在第i个元素的位置 )/InsertStatus Delete(LinkList &L,int i)在无头结点链表L中删除第i个元素 (if(i=l) L=L-next; 删除第一个元
9、素 else(P=L;while(-il) p=p-next;p-next=p-next-next;i 个元素)/DeleteStatus Delete_Between(Linklist &L,int mink,int maxk)/删除元素递增排列的链表 L 中值大于mink且小于maxk的所有元素 (P=L;while(p-next-datanext; /p 是最后个不大于 mink 的元素if(p-next) /如果还有比mink更大的元素 (q=p-next;while(q-datanext; /q 是第个不小于 maxk 的元素 p-next=q;/Delete_BetweenStat
10、us Delete_Equal(Linklist &L)/删除元素递增排列的链表L中所有值相同的元 素 _p=L-next;q=p-next; p,q 指向相邻两元素while(p-next)(if(p-data! =q-data)(p=p-next;q=p-next; /当相邻两元素不相等时,p,q都向后推一步)else(while(q-data=p-data)(free(q);q=q-next;)p-next=q;p=q ;q=p-next; /当相邻元素相等时删除多余元素/else/while/Delete_Equalvoid reverse(SqList &A)顺序表的就地逆置(for
11、(i=l J=A.length;inext;q=p-next;s=q-next;p-next=NULL;while(s-next)(q-next=p;p=q;q=s;s=s-next; /把L的元素逐个插入新表表头)q-next=p;s-next=q;L-next=s;/LinkList_re verse分析:本算茯的思想是,逐个地把L的当前元素q插入新的链表头部,p为新表表头.void mergel(LinkList &A,LinkList &B,LinkList &C)把链表 A 和 B 合并为 C,A 和B的元素间隔排列,且使用原存储空间p=A-next;q=B-next;C=A; wh
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二章 线性表 第二 线性
限制150内