数据结构学习笔记4



                          线性表
定义:
线性表是最简单的一种数据类型,简而言之线性表是n个数据元素的有限序列。
一个数据元素可以由若干个数据项组成;


直接上算法;
2.1 
    已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为LC,且LC中的数据元素仍按值非递减有序排列;
设LA ={3,5,8,11};
LB={2,6,8,9,11,15,20}
则LC={2,3,5,6,8,8,9,11,11,20};
void MergeList(list la,list lb,list &lc)
{
    //已知线性表la和lb中的数据元素按值非递减排列;
//归并到la和lb得到新的线性列表lc,lc的数据元素也按值非递减排列;
initlist(lc);
i=j=1;k=0;
la_len=listlength(la);
lb_len=listlength(lb);
while((i<=la_len)&&(j<=lb_len))
{
    getelen(la,i,ai);getelen(lb,j,bj);
if(ai<=bj){
listinsert((lc,++k,ai);++i);
}
else
{
listinsrt((lc,++k,bj);++j);
}
while(i
{
    getelen(la,i++,ai);
listinsert(lc,++k,ai);
}
while(j<=lb_len)
{
    getelen(lb,j++,bj);listinsert(lc,++k,bj);
}
}


算法2.2
插入新元素的算法;
status listinsert_sq(sqlist&l,int i,elemtype e)
{
    //在顺序线性列表中第I个位置之前插入新元素e;
//i的合法值为1<=i<=listlength_sq(l)+1
if(i<1||i>l.length+1)
return ERROR;//i 值不合法
if(l.length>l.lengthsize)
{
    //当前存储空间已满,增加分配
newbase = (elemtype*)realloc(l.elem,(l.listsize+listincrement)*sizeof(elemtype));
if(!newbase)exit(OVERFLOW);
l.elem=newbase;
l.listsize+=listincrement;
}
q=&(l.elem[i-1]);
for(p=&(l.elem[l.length-1]);p>=q;--p)*(p+1)=*p;
//插入位置之后右移
*q=e;      //插入e;
++l.length;//表长增加1;
return   OK;
}

//在线性表中删除一个数只需要倒过来即可;
                          线性表
定义:
线性表是最简单的一种数据类型,简而言之线性表是n个数据元素的有限序列。
一个数据元素可以由若干个数据项组成;


直接上算法;
2.1 
    已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为LC,且LC中的数据元素仍按值非递减有序排列;
设LA ={3,5,8,11};
LB={2,6,8,9,11,15,20}
则LC={2,3,5,6,8,8,9,11,11,20};
void MergeList(list la,list lb,list &lc)
{
    //已知线性表la和lb中的数据元素按值非递减排列;
//归并到la和lb得到新的线性列表lc,lc的数据元素也按值非递减排列;
initlist(lc);
i=j=1;k=0;
la_len=listlength(la);
lb_len=listlength(lb);
while((i<=la_len)&&(j<=lb_len))
{
    getelen(la,i,ai);getelen(lb,j,bj);
if(ai<=bj){
listinsert((lc,++k,ai);++i);
}
else
{
listinsrt((lc,++k,bj);++j);
}
while(i
{
    getelen(la,i++,ai);
listinsert(lc,++k,ai);
}
while(j<=lb_len)
{
    getelen(lb,j++,bj);listinsert(lc,++k,bj);
}
}


算法2.2
插入新元素的算法;
status listinsert_sq(sqlist&l,int i,elemtype e)
{
    //在顺序线性列表中第I个位置之前插入新元素e;
//i的合法值为1<=i<=listlength_sq(l)+1
if(i<1||i>l.length+1)
return ERROR;//i 值不合法
if(l.length>l.lengthsize)
{
    //当前存储空间已满,增加分配
newbase = (elemtype*)realloc(l.elem,(l.listsize+listincrement)*sizeof(elemtype));
if(!newbase)exit(OVERFLOW);
l.elem=newbase;
l.listsize+=listincrement;
}
q=&(l.elem[i-1]);
for(p=&(l.elem[l.length-1]);p>=q;--p)*(p+1)=*p;
//插入位置之后右移
*q=e;      //插入e;
++l.length;//表长增加1;
return   OK;
}

//在线性表中删除一个数只需要倒过来即可;

你可能感兴趣的:(数据结构)