线性表的顺序存储——顺序表

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27855219/article/details/77949296

线性表可以按照其存储结构划分为顺序表、链表。如下图:


顺序表:用一组地址连续的存储空间,存储表中的元素。则=可以看出有以下几个特点:

                                  

顺序表的描述

(1)数组静态分配

#define Maxsize 30          
typedef int ElemType;
typedef struct{
ElemType data[Maxsize];
int length;
}SqList;

        (2)数组动态分配

#define Maxsize 30         
typedef int ElemType;
typedef struct{
ElemType  *data;
int length;
}SqList;
【注意】
L.data=(ElemType *)malloc(sizeof(ElemType )*InitSize);//C初始内存分配语句
L.data= new ElemType[InitSize];//C++

基本操作:

InitList(&L):初始化线性表。构造一个空的线性表。
Length(L):求表长。
LocateElem(L,e):按值查找。
GetElem(L,i):获取表L中第i个位置上的元素的值。
ListInsert(&L,i,e):在第i个位置插入元素e。
ListDelete(&L,i,&e):删除第i个位置的元素,并用e返回其值。
PrintList(L):输出L。
Empty(L):判空。
DestroyList(&L):销毁,释放空间。

常见基本操作具体代码:

void InitList(SqList &L){
	L.length=0;
}
void ListInsert(SqList&L,int i,ElemType e){//在第i个位置插入元素e。
	//判断i是否有效
	if(i<1||i>L.length+1){
	printf("插入位置有误!\n");
	}
	//判断空间是否已满
	if(L.length>=Maxsize){
		printf("存储空间已满!\n");
	}
	//插入,从第i个元素起,所有元素向后移
	for(int j=L.length;j>=i;j--){
		L.data[j]=L.data[j-1];
	}
	//给第i个位置赋值
	L.data[i-1]=e;
	//表长增加
	L.length++;
}

void ListDelete(SqList &L,int i,ElemType &e){//删除第i个位置的元素,并用e返回其值
	//判断i是否合法
	if(i<1||i>L.length)
	{
		printf("输入不合法!\n");
	}
	//将第i个位置的值赋值给e
	e=L.data[i-1];
	//把从第i+1个元素起向前移
	for(int j=i+1;j<=L.length;j++){
		L.data[j-2]=L.data[j-1];
	}
	//修改表长
	L.length--;
}
int LocateElem(SqList L,ElemType e){//按值查找,存在返回位置,否则返回0
	for(int i=0;i<L.length;i++){
		if(L.data[i]==e){
			return i+1;
		}
	}
	return 0;
}
void PrintList(SqList L){
	int i=0;
	printf("线性表元素为:\n");
	while(i<L.length){
		printf("%d ",L.data[i]);
		i++;
	}
	printf("\n");
}
int Length(SqList L){
	return L.length;
}
完整测试的主函数如下:

void main(){
	SqList L;
	InitList(L);
	for(int i=1;i<=10;i++){
		ListInsert(L,i,i);
	}
	printf("表长:%d\n",Length(L));
	PrintList(L);
	ElemType ch;
	int pos;
	printf("请输入要删除的元素位置:\n");
	scanf("%d",&pos);
	ListDelete(L,pos,ch);
	printf("删除%d之后:\n",ch);
	printf("表长:%d\n",Length(L));
	PrintList(L);
	printf("请输入要查找的元素值:\n");
	scanf("%d",&ch);
	if(LocateElem(L,ch)==0){
		printf("表中不存在此元素!\n");
	}else{
		printf("此元素!\n");
	}
}
结果如下:



猜你喜欢

转载自blog.csdn.net/qq_27855219/article/details/77949296