以前写的,懒得分拆了。直接贴过来。里面有有序表的各种操作。链表的思想是差不多的。
判断
while(pa->next!=null&&pb->next!=null)
{
if(pa->data>pb->data) pb->data插入到新建c链表的的表尾。pb=pb->next;
if(pa->data
}
最后没查完的链表剩余部分整体连接到c的表尾。用指针。很简单。
这是有序表的。你想用泛型编程的话,改造一下就行了。
#include
const int MaxLen=100;
typedef struct
{
int data[MaxLen];
int Len;
}seqlist;
void initial_list(seqlist *L)//初始化;
{
L->Len=0;
}
void list_getdata(seqlist *L) //输入线性表
{
std::cout<<"输入线性表长度:";
std::cin>>L->Len;
std::cout<<"输入数据:" ;
for(int i=0;i
std::cin>>L->data[i];
}
int list_Len(seqlist L)//获得线性表的长度;
{
std::cout<<"线性表长度为:" ;
return(L.Len);
}
void get_element(seqlist L,int i) //找到第i个数据 ;
{
int x;
if(i<1||i>L.Len)
std::cout<<"超出范围,错误"<
std::cout<<"第"< std::cout<
void get_locate(seqlist L,int x)//找到值等于x的数据位于线性表的第几个元素;
{
for(int i=0;i
if(L.data[i]==x)
std::cout< else
std::cout<<"error:无此数据";
}
}
void list_insert(seqlist *L,int i,int x)//将x插入线性表的第i个位置;
{
int j;
if(L->Len==MaxLen)
std::cout<<"溢出"<
std::cout<<"插入位置错误"<
{
for(j=L->Len;j>i-1;j--)
L->data[j]=L->data[j-1];
L->data[i-1]=x;
L->Len++;
}
}
void list_delete(seqlist *L,int i)//删除第i个元素;
{
if(L->Len<=0)
std::cout<<"溢出出错"<
std::cout<<"删除位置出错"<
for(int j=i-1;j
L->data[j]=L->data[j+1];
L->Len--;
}
void list_print(seqlist L)//输出线性表;
{
std::cout<<"线性表为:"<
bool list_b_include_a(seqlist *A,seqlist *B)//判断包含关系;
{
int i,j;
bool suc;
for(i=0;i
{
j=0;suc=0;
while(j
if(A->data[i]==B->data[j])
suc=1;
else j++;
if(suc==0) return false;
}
if(suc==1) return true;
}
bool list_b_include_a_YouXu(seqlist *A,seqlist*B)//判断有序数列包含关系
{
int ia=0,ib=0;
while(ia
if(A->data[ia]==B->data[ib])
{
ia++;
ib++;
}
else if(A->data[ia]>B->data[ib]) ib++;
else return false;
if(ia==A->Len) return true;
else return false;
}
void list_combin(seqlist *A,seqlist *B)//合并两个表
{
int m=A->Len;
for(int i=0;i
{
list_insert(A,m+i+1,B->data[i]);
}
list_print(*A);
}
void list_combin_YouXu(seqlist *A,seqlist *B,seqlist *C)//合并有序数列
{
int ia=0,ib=0,ic=0;
while(ia
if(A->data[ia]==B->data[ib])
{
C->data[ic++]=A->data[ia++];
C->data[ic++]=B->data[ib++];
}
else if(A->data[ia]
C->data[ic++]=A->data[ia++];
else C->data[ic++]=B->data[ib++];
while(ia
while(ib
C->Len=ic;
}
int main()
{
/*seqlist L1;
initial_list(&L1);
std::cout<
//std::cout<
list_print(L1);
list_insert(&L1,4,127);
std::cout<
list_delete(&L1,2);
std::cout<<'\n';
list_print(L1);
*/
/* int i=1; ;
while(i==1)
{
std::cout<<"**********判断La是否是Lb的子集***********"<
list_getdata(&La);//La={1,3,8}
list_print(La);
list_getdata(&Lb);//Lb={2,1,8,6,9,3}
list_print(Lb);
std::cout<
} */
std::cout<<"合并俩个线性表"<
list_getdata(&L1);
list_getdata(&L2);
//list_combin(&L1,&L2);
list_combin_YouXu(&L1,&L2,&L3);
list_print(L3);
return 0;
}