【实验内容】
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int ElemType;
typedef int Status;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct //参考书Pg. 22
{
ElemType *base;//数组元素基址
int length;//数组不同维度的大小
int listsize;//当前分配的存储容量
}SqList;
//线性表初始化函数:
//初始构造 LIST_INIT_SIZE 的线性表 L。
Status InitList_Sq(SqList &L)
{
L.base =new ElemType[LIST_INIT_SIZE];
L.length =0;
L.listsize =sizeof(ElemType)*LIST_INIT_SIZE;
return true;
}
//销毁一个线性表
//释放数组元素所占内存,并设置相关指针为0
Status DestroyArray(SqList &L)
{
if(L.base )
{
delete[] L.base ;
L.base =NULL;
}
L.length =0;
L.listsize=0;
return true;
}
//在L中第i个位置之前插入新的数据元素e, L的长度加1
Status ListInsert (SqList &L, int i,ElemType e)
{
if((i<1)||(i>L.length+1))
return false;
if(L.length==LIST_INIT_SIZE)
return false;
int j;
for(j=L.length-1;j>=i-1;j--)
{
L.base[j+1]=L.base[j];
}
L.base[i-1]=e;
L.length++;
return true;
}
//删掉L的第i个数据元素,并用e返回其值,L的长度减1
Status ListDelete (SqList &L, int i,ElemType &e)
{
if((i<1)||(i>L.length)) return false;
int j;
e=L.base[i-1];
for(j=i;j<=L.length-1;j++ )
{
L.base [j-1]=L.base [j];
}
L.length--;
return true;
}
//La和Lb的数据时按值非递减排列,归并La和Lb得到新的线性表 Lc,Lc的数据元素也按非递减排序
Status MergeList (SqList &La,SqList &Lb,SqList &Lc)
{
int i,j,temp;
for(i=1;i<La.length;i++)
{
for(j=0;j<La.length-i;j++)
{
if(La.base[j]>La.base[j+1])
{
temp=La.base[j];
La.base[j]=La.base[j+1];
La.base[j+1]=temp;
}
}
}
for(i=1;i<Lb.length;i++)
{
for(j=0;j<Lb.length-i;j++)
{
if(Lb.base[j]>Lb.base[j+1])
{
temp=Lb.base[j];
Lb.base[j]=Lb.base[j+1];
Lb.base[j+1]=temp;
}
}
}
Lc.length=La.length+Lb.length;
for(i=0;i<(La.length+Lb.length);i++)
{
if(i<La.length)
Lc.base[i]=La.base[i];
else
Lc.base[i]=Lb.base[i-La.length];
}
for(i=1;i<Lc.length;i++)
{
for(j=0;j<Lc.length-i;j++)
{
if(Lc.base[j]>Lc.base[j+1])
{
temp=Lc.base[j];
Lc.base[j]=Lc.base[j+1];
Lc.base[j+1]=temp;
}
}
}
return true;
}
//主函数
int main(int argc,char* argv[])
{
//输入你的姓名和学号
printf("\n%s, %s\n",name,id);
SqList La;
//初始化 La
InitList_Sq(La);
//为La赋值,里面的base数组元素赋值为【3,5,8,11】,length为4
//请补充你的代码
La.base[0]=3;
La.base[1]=5;
La.base[2]=8;
La.base[3]=11;
La.length=4;
//输出当前La中的base数组元素和长度, 屏幕应为显示:当前La中的元素为【3,5,8,11】,长度为4
//请补充你的代码
printf("当前La中的元素为【");
int k;
for(k=0;k<La.length;k++)
{
printf("%d",La.base[k]);
if(k!=La.length-1)
printf(",");
}
printf("】,长度为%d\n",La.length);
//在La中base数组的第3个元素之前插入元素6
//请补充你的代码
ListInsert (La, 3,6);
//输出当前La中的base数组元素和长度,屏幕应为显示:当前La中的元素为【3,5,6,8,11】,长度为5
//请补充你的代码
printf("当前La中的元素为【");
for(k=0;k<La.length;k++)
{
printf("%d",La.base[k]);
if(k!=La.length-1)
printf(",");
}
printf("】,长度为%d\n",La.length);
//删除当前La中base数组的第4个元素
//请补充你的代码
ElemType e;
ListDelete (La,4,e);
//输出当前La中的base数组元素和长度,屏幕应为显示:当前La中的元素为【3,5,6,11】,长度为4
//请补充你的代码
printf("当前La中的元素为【");
for(k=0;k<La.length;k++)
{
printf("%d",La.base[k]);
if(k!=La.length-1)
printf(",");
}
printf("】,长度为%d\n",La.length);
SqList Lb;
//初始化 Lb
//请补充你的代码
InitList_Sq(Lb);
//为Lb赋值,里面的base数组元素赋值为【2,3,4,6,8,9,10,14,17,18】,length为10
//请补充你的代码
ListInsert (Lb, 1,2);
ListInsert (Lb, 2,3);
ListInsert (Lb, 3,4);
ListInsert (Lb, 4,6);
ListInsert (Lb, 5,8);
ListInsert (Lb, 6,9);
ListInsert (Lb, 7,10);
ListInsert (Lb, 8,14);
ListInsert (Lb, 9,17);
ListInsert (Lb, 10,18);
//输出当前Lb中的base数组元素和长度,屏幕应为显示:当前Lb中的元素为【2,3,4,6,8,9,10,14,17,18】,长度为10
//请补充你的代码
printf("当前Lb中的元素为【");
for(k=0;k<Lb.length;k++)
{
printf("%d",Lb.base[k]);
if(k!=Lb.length-1)
printf(",");
}
printf("】,长度为%d\n",Lb.length);
SqList Lc;
//初始化 Lc
//请补充你的代码
InitList_Sq(Lc);
//合并当前La和Lb,得到新的Lc
//请补充你的代码
MergeList (La,Lb,Lc);
//输出当前Lc中的base数组元素和长度,屏幕应为显示:当前Lc中的元素为【2,3,3,4,5,6,6,8,9,10,11,14,17,18】,长度为14
//请补充你的代码
printf("当前Lc中的元素为【");
for(k=0;k<Lc.length;k++)
{
printf("%d",Lc.base[k]);
if(k!=Lc.length-1)
printf(",");
}
printf("】,长度为%d\n",Lc.length);
//释放La,Lb,Lc
//请补充你的代码
DestroyArray(La);
DestroyArray(Lb);
DestroyArray(Lc);
return 1;
}