1、sum=0; /xp用于存放x的i次方i+)sum+=xp*(*p+);xp*=x;Value is:,sum);/polyvalue第二章 线性表 2.10 Status DeleteK(SqList &a,int i,int k)/删除线性表a中第i个元素起的k个元素if(i1|ka.length) return INFEASIBLE;for(count=1;i+count-1va.listsize) return ERROR;va.length+;for(i=va.length-1;va.elemix&i=0;i-)va.elemi+1=va.elemi;va.elemi+1=x;/In
2、sert_SqList 2.12 int ListComp(SqList A,SqList B)/比较字符表A和B,并用返回值表示结果,值为正,表示AB;值为负,表示Anext;p&p-data!=x;p=p-next);return p;/Locate 2.14 int Length(LinkList L)/求链表的长度for(k=0,p=L;next,k+);return k;/Length 2.15 void ListConcat(LinkList ha,LinkList hb,LinkList &hc)/把链表hb接在ha后面形成链表hchc=ha;p=ha;while(p-next)
3、 p=p-next=hb;/ListConcat 2.16 见书后答案. 2.17 Status Insert(LinkList &L,int i,int b)/在无头结点链表L的第i个元素之前插入元素bp=L;q=(LinkList*)malloc(sizeof(LNode);q.data=b;if(i=1)q.next=p;L=q; /插入在链表头部elsewhile(-i1) p=p-q-next=p-next=q; /插入在第i个元素的位置/Insert 2.18 Status Delete(LinkList &L,int i)/在无头结点链表L中删除第i个元素if(i=1) L=L-
4、 /删除第一个元素next- /删除第i个元素/Delete 2.19 Status Delete_Between(Linklist &L,int mink,int maxk)/删除元素递增排列的链表L中值大于mink且小于maxk的所有元素data /p是最后一个不大于mink的元素if(p-next)/如果还有比mink更大的元素q=p-while(q-maxk) q=q- /q是第一个不小于maxk的元素/Delete_Between 2.20 Status Delete_Equal(Linklist &L)/删除元素递增排列的链表L中所有值相同的元素p=L- /p,q指向相邻两元素ne
5、xt)=q-data) /当相邻两元素不相等时,p,q都向后推一步data=p-data) free(q); q=q- p=q; /当相邻元素相等时删除多余元素/else/while/Delete_Equal 2.21 void reverse(SqList &A)/顺序表的就地逆置for(i=1,j=A.length;j;i+,j-)A.elemiA.elemj;/reverse 2.22 void LinkList_reverse(Linklist &L)/链表的就地逆置;为简化算法,假设表长大于2s=q-next=NULL;while(s-next=p;q=s;s=s- /把L的元素逐个
6、插入新表表头s-L-next=s;/LinkList_reverse分析:本算法的思想是,逐个地把L的当前元素q插入新的链表头部,p为新表表头. 2.23 void merge1(LinkList &A,LinkList &B,LinkList &C)/把链表A和B合并为C,A和B的元素间隔排列,且使用原存储空间p=A-q=B-C=A;while(p&q)s=p- /将B的元素插入if(s)t=q- /如A非空,将A的元素插入p=s;q=t;/merge1 2.24 void reverse_merge(LinkList &C)/把元素递增排列的链表A和B合并为C,且C中元素递减排列,使用原空
7、间pa=A-pb=B-pre=NULL; /pa和pb分别指向A,B的当前元素while(pa|pb)if(pa-pb-data|!pb)pc=pa;q=pa-pa-next=pre;pa=q; /将A的元素插入新表pc=pb;q=pb-pb=q; /将B的元素插入新表pre=pc;A-next=pc; /构造新表头/reverse_merge本算法的思想是,按从小到大的顺序依次把A和B的元素插入新表的头部pc处,最后处理A或B的剩余元素. 2.25 void SqList_Intersect(SqList A,SqList B,SqList &C)/求元素递增排列的线性表A和B的元素的交集并
8、存入C中i=1;j=1;k=0;while(A.elemi&B.elemj)if(A.elemiB.elemj) j+;if(A.elemi=B.elemj)C.elem+k=A.elemi; /当发现了一个在A,B中都存在的元素,i+;j+; /就添加到C中/SqList_Intersect 2.26 void LinkList_Intersect(LinkList A,LinkList B,LinkList &C)/在链表结构上重做上题pc=(LNode*)malloc(sizeof(LNode);data) p=p-else if(p-datadata) q=q-s=(LNode*)malloc(sizeof(LNode);data=p-data;pc-pc=s;q=q-C=pc;/LinkList_Intersect 2.27 void SqList_Intersect_True(SqList &A,SqList B)/求元素递增排列的线性表A和B的元素的交集并存回A中else if(A.elemielse if(A.elemi!=A.elemk)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1