任务描述:La表的数据(3,5,8,11) Lb表的数据是(2,6,8,9,11,15,20)将La中的数据和Lb的数据按顺序依次插入到Lc中 但是要为Lc至少初始化一个数据 否则就插不进去 不知道怎么改 而且display()还是返回状态结果。
#include <iostream>
//包含文件
using namespace std;
#define LIST_INIT_SIZE 100
//初始化分配量
#define LISTINCREMENT 10
//存储空间的分配增量
typedef int status;
//存储结构的类型定义 返回函数的状态结果代码
typedef int ElemType;
//数据元素/結点的表示 这个是用户自定义的数据类型 用于结点
typedef struct{
ElemType *elem;//结点的储存空间首地址
int length;//当前长度
int listsize;//当前的分配的存储容量 (以sizeof (ElemType)为单位)
}IntNode; //相当于在java中定义了一个叫IntNode的结点类
status IntList(IntNode &L)
{//这个函数实现的是构建一个空线性表 在这之前我们要为其分配100个ElemType大小的
L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
//分配100个ElemType大小的存储空间,并把地址分配给指向ElemType的指针elem
if(!L.elem)
exit(0);//如果没有分配成功 那么存储失败
L.length = 0;//长度为0
L.listsize = LIST_INIT_SIZE;//初始容量是100
return true;
}
status InsertList(IntNode &L,int n)
{
cout<<"请输入数据"<<endl;
for(int i =0;i<n;i++)
{
cin>>L.elem[i];
++L.length;
if(L.length>=L.listsize)
{
ElemType * newbase;
newbase = (ElemType *)realloc(L.elem,
(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
exit(0);
L.elem= newbase;
L.length+=LISTINCREMENT;
//这段代码的意思是 当线性表的长度小于最大分配的空间时
//你就要重新分配出110的分配空间 并将指针赋给newbase
}
}
return true;
}
status ListLength(IntNode &L)
{
int answer;
for(int i =0;i<L.length;i++)
{
answer++;
}
return L.length;
}
status ListInsert(IntNode &L,int i,ElemType e)
{//在i的位置之前插入e元素 并使L的长度增加
//有了前置条件 i必须是不超出线性表范围的 1<=i<=L.length+1
if(i>L.length||i<0)
return false;
if(L.length>=L.listsize)
{
ElemType * newbase;
newbase = (ElemType *)realloc(L.elem,
(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
exit(0);
L.elem= newbase;
L.length+=LISTINCREMENT;
//这段代码的意思是 当线性表的长度小于最大分配的空间时
//你就要重新分配出110的分配空间 并将指针赋给newbase
}
ElemType *p =&(L.elem[i-1]);//指定的位置
for(ElemType *q = &(L.elem[L.length-1]);q>=p;--q)
{
*(q+1)=*(q);//插入位置及之后的元素右移
}
*p =e;
++L.length;
return true;
}
status GetElem(IntNode &L,int i) {
ElemType *p = & (L.elem[i-1]);
ElemType e = *p;
return e;
}
status LocateElem(IntNode &L,ElemType e)
{
ElemType *p =&(L.elem[0]);//首位置
for(ElemType *q = &(L.elem[L.length-1]);p<=q;p++)
{
if(e==*p)
return true;
}
return false;
}
status display(IntNode &L,int n){
for ( int i = 0; i <=n ; i ++)
{
cout << L.elem[i]<< " ";
}
return true;
}
int main()
{
IntNode La;
IntNode Lb;
IntNode Lc;
IntList(La);
IntList(Lb);
IntList(Lc);
InsertList(Lc,1);
InsertList(La,4);
InsertList(Lb,7);
int i =1;
int j =1;
int k =0;
ElemType e = GetElem(La,1);
while(i<=La.length&&j<=Lb.length)
{
ElemType e1 = GetElem(La,i);
ElemType e2 = GetElem(Lb,j);
if(e1<=e2)
{
ListInsert(Lc,++k,e1);
++i;
}
else
{
ListInsert(Lc,++k,e2);
++j;
}
}
while(i<=La.length)
{
ElemType e3 = GetElem(La,i++);
ListInsert(Lc,++k,e3);
}
while(j<=Lb.length)
{
ElemType e4 = GetElem(Lb,j++);
ListInsert(Lc,++k,e4);
}
cout<<display(Lc,11)<<endl;
cout<<endl;
return 0;
}