线性表1

线性表:是一种数据结构,有数据元素和指针组成的有限的序列。

线性表存储结构:

#define LIST_INIT_SIZE 100//线性表存储空间的初始分量

#define LISTINCREMENT 10//线性表的存储空间的分配的增量

typedef struct

{

   ElemType *elem;//存储空间的基址

   int length;//当前的长度

   int listsize;//当前分配的存储容量

}

上面是一个线性表的一个基本的数据结构,下面我们同一个例子来对线性表进一步的理解:

问题:有两个线性表LA和LB中数据元素按照非递减的有序排列,现在需要做的事情是将LA和LB合并成为一个新的线性表LC并且要求LC依然按照是非递减有序排列

问题分析:

1.需要创建三个线性表分别用来存储LA,LB以及两者合并之后生成的LC然后我们需要做的 事情是将LC中的数据进行按照非递减的有序排列

问题细化:

(1)首先是定义一个线性表的数据结构,也就是上面定义的;

(2)在主函数中定义一个该变量Sqlist LA,LB,LC;并且初始化成为一个数据表InitList(*LA) InitList(*LB),InitList(*LC)

得到问题怎样初始化一个线性表:

//初始化线性表需要三个步骤:1.申请存储空间2.长度初始化3.当前最大的容量的一个初始化

int InitList(SqList* L)  

L->elem=(DataType *)malloc((LIST_INTSIZE+1)*sizeof(DataType));  
if (!L->elem)
{
cout<<"\t\t\t内存分配失败\n";
return 0;
}
L->length=0;
L->listsize=LIST_INTSIZE;  
//cout<<"\t\t\t内存分配成功\n";
return OK;
}

(3)现在我们需要做的事情是将题目中给的数据插入到数据表中,数据需要依次的插入到表中

while(j){cin>>x; i++;insertList(&La,i,x);c=getchar();if(c=='\n')j=0;}

这个地方也用到了一个函数InsertLIst(Sqlist L,int i,ElemType e)

{

     if(i<1 || i>L.length+1) return error;

      if(L.length>=L.listsize)

    {

        ElemType*newbase=(ElemType *) realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemTYpe));

        if(newbase)exit(overflow);

        L.elem=newbase

       L.listsize+=LISTINCREMENT;   

   }

    ElemType *p;
ElemType *q=&(L->elem[i-1]);//从这个地方可以看出的是L->elem[0]依然是一个数据
for(p=&(L->elem[L->length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++L->length;
return OK;

}

(3)这样也就是说两个数据表LA和LB都有数据了,现在我我们需要做的事情让两个数据表进行合并

       void Mergelist(SqList La,SqList Lb,SqList *Lc)
{  
InitList(Lc);
       int a[100],b[100];
int i=0,j=0,k=0,La_len,Lb_len;
      La_len=ListLength(&La);Lb_len=ListLength(&Lb);
while((i<La_len)&&(j<=Lb_len))//均非空

a[i]=GetElem(&La,i);b[j]=GetElem(&Lb,j);
if(a[i]<=b[j])
{
insertList(Lc,++k,a[i]);++i;
}
        else
{
insertList(Lc,++k,b[j]);++j;
}
}
while(i<La_len)
{
  a[i]=GetElem(&La,i++);
  insertList(Lc,++k,a[i]);
}
while(j<Lb_len)
{
b[j]=GetElem(&Lb,j++);
insertList(Lc,++k,b[j]);
}
}//mergeList

我们可以感受一些这个函数的思想是,定义两个空的数组,然后给两个数组然后依次的从la和lb中取出数据,并且都是从开始进行取,存入到数组中然后比较两个数的大小,将较小的存入到LC中,直到la和lb中两个数据较少的一个取出完了,然后将另外的一个数据表中的 数据全部插入到LC中,在这个地方我们需要知道的两个基本函数是获取getListLength(Sqlist)和函数Getelem(Sqlist,i)获取线性表中的第i个元素。

我们将给出一个完整的线性表在下一节:线性表2




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值