所谓有序表,是指这样的线性表,其中所有的元素以递增或递减的方式排列,并且规定有序表中不存在元素值相同的元素!
#include<iostream>
using namespace std;
int ListInsert(SqList *&L,ElemType e) //用顺序表存储有序表,只有ListInsert()有所差异,其余相同
{
int i=0,j;
while(i<L->length&&L->data[i]<e)
i++;
if(L->data[i]==e)
return 0;
for(j=ListLength(L);j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return 1;
}
//将有序表LA和LB合并成一个有序表LC,要求不破坏原有表的LA和LB p54例题2.11
void UnionList(SqList *LA,SqList *LB,SqList *&LC) //采用顺序表存储有序表
{
int i=0,j=0,k=0;
LC=(SqList *)malloc (sizeof(SqList));
LC->length=0;
while(i<LA->length&&j<LB->length)
{
if(LA->data[i]<LB->data[j])
{
LC->data[k]=LA->data[i];
i++;
k++;
}
else
{
LC->data[k]=LB->data[j];
j++;
k++;
}
}
while(i<LA->length)
{
LC->data[k]=LA->data[i];
i++;
k++;
}
while(j<LB->length)
{
LC->data[k]=LB->data[j];
i++;
j++;
}
LC->length=k;
}
void UnionList(LinkList *LA,LinkList *LB,LinkList *&LC)
{
LinkList *pa=LA->next;
LinkList *pb=LB->next;
LinkList *pc,*s;
LC=(LinkList *)malloc (sizeof(LinkList));
pc=LC;
while(pa!=NULL&&pb!=NULL)
{
if(pa->data<pb->data)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=pa->data;
pc->next=s;
pc=s;
pa=pa->next;
}
else
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=pb->data;
pc->next=s;
pc=s;
pb=pb->next;
}
}
while(pa!=NULL)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=pa->data;
pc->next=s;
pc=s;
pa=pa->next;
}
while(pb!=NULL)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=pb->data;
pc->next=s;
pc=s;
pb=pb->next;
}
pc->next=NULL;
}
void Commnode(LinkList *&LA,LinkList *LB,LinkList *LC)//P55 例题2.12
{
LinkList *pa=LA->next,*pb=LB->next,*pc=LC->next,*q,*r;
LA->next=NULL;
r=LA;
while(pa!=NULL)
{
while(pb!=NULL&&pa->data>pb->data)
{
pb=pb->next;
}
while(pc!=NULL&&pa->datapa->data>pc->data)
{
pc=pc->next;
}
if(pb!=NULL&&pc!=NULL&&pa->data==pb->data&&pa->data==pc->data)
{
r->next=pa;
r=pa;
pa=pa->next;
}
else
{
q=pa;
pa=pa->next;
free(q);
}
}
r->next=NULL;
}