一、 实验目的
用顺序表(SqList)类型实现书上算法2.1和2.2,了解线性表及在计算机中的两类不同的存储结构;熟练掌握线性表的查找、插入和删除等算法并灵活运用这些算法。
二、 实验内容
用C语言编写程序,其中Lb={2,4,6,8,10} La={1,2,3,4,5},
① 算法2.1执行后,得到的new La = 1,2,3,4,5,6,8,10
② 修改Lb=2,6,8,9,11,15,20,并利用新生成的La,得到合并后的Lc,
Lc= 1,2,2,3,4,5,6,6,8,8,9,10,11,15,20
三、 实验步骤
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct{
int *elem;
int length;
int listsize;
}SqList;
void InitList_Sq(SqList &L){
L.elem=(int *)malloc(20*sizeof(int));
L.length=0;
L.listsize=10;
}
void addList(SqList &L){
int i,n;
printf("请输入需要创建的顺序表元素总数:");
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&L.elem[i]);
L.length++;
}
}
void PrintList(SqList L){
int i;
printf("该顺序表元素为:");
for (i=0;i<L.length;i++){
printf("%d ",L.elem[i]);
}
printf("\n");
}
int LocateElem(SqList &L,int e)
{
int i=0;
while (i<L.length && L.elem[i]!=e) i++;
if (i>=L.length)
return 0;
else
return 1;
}
void bToa(SqList &La,SqList Lb){
int i,e,judge;
for(i=0;i<Lb.length;i++){
e=Lb.elem[i];
judge=LocateElem(La,e);
if(!judge){
La.length++;
La.elem[La.length-1]=e;
}
}
}
void MergSqlist(SqList La,SqList Lb,SqList &Lc){
int i=0,j=0,k=0;
while(i<La.length && j<Lb.length){
if(La.elem[i]<=Lb.elem[j]){
Lc.elem[k]=La.elem[i];
i++; k++;
}
else{
Lc.elem[k]=Lb.elem[j];
j++; k++;
}
Lc.length++;
}
while(i<La.length){
Lc.elem[k]=La.elem[i];
i++; k++;
Lc.length++;
}
while(j<Lb.length){
Lc.elem[k]=Lb.elem[j];
j++; k++; Lc.length++;
}
}
//排序
void sortlist(SqList &L){
int i,j,temp;
for (i=0;i<L.length;i++){
for(j=0;j<L.length-i;j++){
if(L.elem[j]>L.elem[j+1]){
temp=L.elem[j];
L.elem[j]=L.elem[j+1];
L.elem[j+1]=temp;
}
}
}
}
void clearlist(SqList &L){
L.length=0;
}
int main(int argc,char **argv){
SqList La,Lb,Lc;
InitList_Sq(La);InitList_Sq(Lb);InitList_Sq(Lc);
addList(La);
sortlist(La);
PrintList(La);
addList(Lb);
sortlist(Lb);
PrintList(Lb);
bToa(La,Lb);
sortlist(La);
PrintList(La);
clearlist(Lb);
addList(Lb);
sortlist(Lb);
PrintList(Lb);
MergSqlist(La,Lb,Lc);
PrintList(Lc);
return 0;
}
四、 体会和总结
线性表是软件设计中最基础的数据结构。用顺序方法存储的线性表称为顺序表,当线性表中很少做插入和删除操作,线性表的长度变化不大,易于事先确定其大小时,可以采用顺序表作为存储结构。
在实际应用中应该考虑以下因素:
(1)应有利于运算的实现;
(2)应有利于数据的特性;
(3)应有利于软件环境。