A、elem[m++]=A、elem[i++];//A的剩余元素重新存储。
A、length=m;
}//SqList_Intersect_Delete
分析:
先从B与C中找出共有元素,记为same,再在A中从当前位置开始,凡小于same的
元素均保留(存到新的位置),等于same的就跳过,到大于same时就再找下一个same、
2、30
voidLinkList_Intersect_Delete(LinkList&A,LinkListB,LinkListC)//在链表结构上重做上题
{
p=B->next;q=C->next;r=A-next;
while(p&&q&&r)
{
if(p->datadata)p=p->next;
elseif(p->data>q->data)q=q->next;
else
{
u=p->data;//确定待删除元素u
while(r->next->datanext;//确定最后一个小于u的元素指针r
if(r->next->data==u)
{
s=r->next;
while(s->data==u)
{
t=s;s=s->next;free(t);//确定第一个大于u的元素指针s
}//while
r->next=s;//删除r与s之间的元素
}//if
while(p->data=u)p=p->next;
while(q->data=u)q=q->next;
}//else
}//while
}//LinkList_Intersect_Delete
2、31
StatusDelete_Pre(CiLNode*s)//删除单循环链表中结点s的直接前驱
{
p=s;
while(p->next->next!
=s)p=p->next;//找到s的前驱的前驱p
p->next=s;
returnOK;
}//Delete_Pre
2、32
StatusDuLNode_Pre(DuLinkList&L)//完成双向循环链表结点的pre域
{
for(p=L;!
p->next->pre;p=p->next)p->next->pre=p;
returnOK;
}//DuLNode_Pre
2、33
StatusLinkList_Divide(LinkList&L,CiList&A,CiList&B,CiList&C)//把单链表L的元素按类型分为三个循环链表、CiList为带头结点的单循环链表类型、
{
s=L->next;
A=(CiList*)malloc(sizeof(CiLNode));p=A;
B=(CiList*)malloc(sizeof(CiLNode));q=B;
C=(CiList*)malloc(sizeof(CiLNode));r=C;//建立头结点
while(s)
{
if(isalphabet(s->data))
{
p->next=s;p=s;
}
elseif(isdigit(s->data))
{
q->next=s;q=s;
}
else
{
r->next=s;r=s;
}
}//while
p->next=A;q->next=B;r->next=C;//完成循环链表
}//LinkList_Divide
2、34
voidPrint_XorLinkedList(XorLinkedListL)//从左向右输出异或链表的元素值
{
p=L、left;pre=NULL;
while(p)
{
printf("%d",p->data);
q=XorP(p->LRPtr,pre);
pre=p;p=q;//任何一个结点的LRPtr域值与其左结点指针进行异或运算即得到其右结点指针
}
}//Print_XorLinkedList
2、35
StatusInsert_XorLinkedList(XorLinkedList&L,intx,inti)//在异或链表L的第i个元素前插入元素x
{
p=L、left;pre=NULL;
r=(XorNode*)malloc(sizeof(XorNode));
r->data=x;
if(i==1)//当插入点在最左边的情况
{
p->LRPtr=XorP(p、LRPtr,r);
r->LRPtr=p;
L、left=r;
returnOK;
}
j=1;q=p->LRPtr;//当插入点在中间的情况
while(++j
{
q=XorP(p->LRPtr,pre);
pre=p;p=q;
}//while//在p,q两结点之间插入
if(!
q)returnINFEASIBLE;//i不可以超过表长
p->LRPtr=XorP(XorP(p->LRPtr,q),r);
q->LRPtr=XorP(XorP(q->LRPtr,p),r);
r->LRPtr=XorP(p,q);//修改指针
returnOK;
}//Insert_XorLinkedList
2、36
StatusDelete_XorLinkedList(XorlinkedList&L,inti)//删除异或链表L的第i个元素
{
p=L、left;pre=NULL;
if(i==1)//删除最左结点的情况
{
q=p->LRPtr;
q->LRPtr=XorP(q->LRPtr,p);
L、left=q;free(p);
returnOK;
}
j=1;q=p->LRPtr;
while(++j
{
q=XorP(p->LRPtr,pre);
pre=p;p=q;
}//while//找到待删结点q
if(!
q)returnINFEASIBLE;//i不可以超过表长
if(L、right==q)//q为最右结点的情况
{
p->LRPtr=XorP(p->LRPtr,q);
L、right=p;free(q);
returnOK;
}
r=XorP(q->LRPtr,p);//q为中间结点的情况,此时p,r分别为其左右结点
p->LRPtr=XorP(XorP(p->LRPtr,q)