线性表的顺序存储和操作

一、 实验目的

用顺序表(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)应有利于软件环境。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值