(1)B(2)A(3)B(4)A(5)D(6)B(7)C(8)A(9)B(10)D(11)C(12)D(13)D(14)A(15)C
(1)
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc) { //将两个递增的有序链表La和Lb合并为一个递增的有序链表Lc pa=La->next; //pa是链表La的工作指针,初始化为首元结点 pb=Lb->next; //pb是链表Lb的工作指针,初始化为首元结点 //pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的首元结点 Lc=pc=La; //用La的头结点作为Lc的头结点 while(pa&&pb) //两个链表La和Lb均未到达表尾结点 { if(pa->data<pb->data) { //取较小者La中的元素,将pa链接在pc的后面,pa指针后移 pc->next=pa; pc=pa; pa=pa->next; } else if(pa->data>pb->data) { //取较小者Lb中的元素,将pb链接在pc的后面,pb指针后移 pc->next=pb; pc=pb; pb=pb->next; } else { //相等时取La中的元素,删除Lb中的元素 pc->next=pa; pc=pa->next; q=pb->next; delete pb; pb=q; } } pc->next=pa?pa:pb; //将非空表的剩余元素直接链接在Lc表的最后 delete Lb; //释放Lb的头结点 }
(2)
void MergeList (LinkList &La, LinkList &Lb, LinkList &Lc) {//将两个非递减的有序链表La和Lb合并为一个非递增的有序链表Lc pa=La->next; //pa是链表La的工作指针,初始化为首元结点 pb=Lb->next; //pb是链表Lb的工作指针,初始化为首元结点 Lc=pc=La; //用La的头结点作为Lc的头结点 Lc->next=NULL; while (pal Ipb) //只要有一一个表未到达表尾结点,用q指向待摘取的元素 { if(!pa) //La表为空,用q指向pb, pb指针后移 { q=pb; pb=pb->next; } eise if(!pb) //Lb表为空,用q指向pa, pa指针后移 { q=pa; pa=pa->next; } else if(pa->data<=pb->data) //取较小者La中的元素,用q指向pa, pa指针后移 { q=pa; pa=pa->next; } else //取较小者Lb中的元素,用q指向pb, pb指针后移 { q-pb; pb=pb->next ; } q->next=Lc->next; Le->next=q; //将q指向的结点插在LC的表头结点之后 } delete Lb; //释放Lb的头结点 }
(3)
void Intersection (LinkList &La, LinkList &Lb, LinkList &Lc) {//求两个递增的有序链表La和Lb的交集,使用头指针Lc指向 pa=La->next; //pa是链表La的工作指针,初始化为首元结点 pb=Lb->next; //pb是链表Lb的工作指针,初始化为首元结点 Lc-pc=La; //用La的头结点作为Lc的头结点 while (pa 6&pb) //两个链表La和Lb均未到达表尾结点 { if (pa->data=-pb->data) //相等,交集并人结果表中 { pc->next=pa; pc=pa; pa-pa->next; //取La中的元素,将pa链接在pc的后面,pa指针后移 u=pb; pb=pb->next; delete u; //删除Lb中的对应的相等元素 } else if (pa->data<pb->data) / /删除较小者La中的元素 { u=pa; pa=pa->next; delete u; } else //删除较小者Lb中的元素 { u=pb; pb=pb->next; delete u; while(pa) //Lb为空,删除非空表Ia中的所有元素 { u=pa; pa=pa->next; delete u; } while (pb) //La为空,删除非空表Lb中的所有元素 { u=pb; pb=pb- >next; delete u; } pc->next =NULL; //置链表LC尾标记 delete Lb; //释放Lb的头结点 }
(4)
void Difference (LinkList 6La, LinkList 6Lb, int &n) { //La 和Lb差集的结果存储于La中,n是结果集合中元素个数,调用时为0 pa=La->next; //pa 是链表La的工作指针,初始化为首元结点 pb=Lb->next; //pb是链表Lb的工作指针,初始化为首元结点 pre=La; //pre为La中pa所指结点的前驱结点的指针 while (pas&pb) //两个链表La和Lb均未到达表尾结点 { if (pa->data<pb->data) //A链表中当前结点指针后移 { n++; pre=pa; pa=pa->next; } else if (pa->data>pb->data) pb=pb->next; //B链表中当前结点指针后移 else //在La表删除La和Lb中元素值相同的结点 { pre->next=pa->next; u=pa; pa=pa->next; delete u; //删除结点 } } }
(5)
void Decompose (LinkList GA, LinkList &B, LinkList &C) { //单链表A分解为两个具有相同结构的链表B和C B=A; B->next=NULL; //B表初始化 C=new LNode; //为C申请结点空间 C->next=NULL; //C初始化为空表 P=A->next; //p为工作指针 while (p!=NULL) //表A未到达表尾结点 { r=p->next; //暂存p的后继 if(p->data<0) //将小于0的结点链人B表,前插法 { p->next=B->next; B->next=p; } else //将大于0的结点链入C表,前插法 { p->next=C- >next; C->next=p; } p=r; //p指向新的待处理结点 } }
(6)
ElemType Max (LinkList L) { //确定单链表中值最大的结点 if(L->next==NULL) return NULL; pmax=L->next; //pmax指向首元结点 p=L->next->next; //p指向第二个结点 while (p!=NULL) //遍历链表,如果下一个结点存在 { if (p->data>pmax->data) pmax=p; //pmax指向数值大的结点 p=p->next; //p指向下一个结点,继续遍历 } return pmax- >data; }
(7)
void Inverse (LinkList &L) { //逆置带头结点的单链表L p=L->next; //p指向首元结点 L->next-NULL; //头结点的指针域置为空 while (p!=NULL) //遍历链表,如果下一个结点存在 { q=p->next; //q指向*p的后继 p->next=L->next; L->next=p; //*p插入在头结点之后 p=q; } }
(8)
void DeleteMinMax (LinkList GL, int mink, int maxk) ( //删除递增有序链表L中值大于mink且小于maxk的所有元素 p=L->next; //p指向首元结点 while (p&bp->data<=mink) //查找第一 -个值大于mink的结点 { pre=p; //pre指向前驱结点 p=p->next; } while (p&&p->data<maxk) //查找第一个值大于等于maxk的结点 { p=p->next; q-pre->next; pre->next=p; //修改待删除结点的指针 } while(q!=p) //依次释放待删除结点的空间 { s=q->next; delete q; q=s; } } }
(9)
void Exchange ( DuLinkList p) { //在双向循环链表,交换p所指向的结点及其前驱结点的顺序 q=p->prior; //对应图2.14① q->prior ->next=p; //对应图2.14② p->prior=q->prior; //对应图2.14③ q->next=p->next; //对应图2.14④ q->prior=p; //对应图2.14⑤ p->next->prior=q; //对应图2.14⑥ p->next=q; //对应图2.14⑦ }
(10)
void DeleteItem(SqList &A, ElemType item) { //删除顺序表A中所有值为item的元素 k=0; //k记录值不等于item的元素个数 for (i=0;i<A. length;i++) //从前向后扫描顺序表 { if(A.E1em[i]!=item) //查找值不为item的元素 { A.Elem[k]=A.Elem[i]; //利用原表的空间记录值不为item的元素 k++; //不等于item的元素增1 } A.Length=k; //顺序表A的长度等于k }
标签:结点,Lb,线性表,La,next,pb,pa,习题,数据结构 From: https://www.cnblogs.com/Santariki/p/16814734.html