线性表的顺序表实现和分析

目录

一、静态分配的线性表

二、动态分配的线性表

三、使用静态线性表演示其他操作

1、求表长

2、按值查找

3、按位序查找

4、插入操作

5、删除操作

6、判空

7、销毁表

四、测试

下一篇:线性表的链表实现和分析


一、静态分配的线性表

#define MaxSize 10//表最大长度 
typedef struct{
	int data[MaxSize];
	int length;
}SqList;

//初始化 
void InitList(SqList &L){
	for(int i=0;i<MaxSize;i++){
		L.data[i]=0;//所有元素默认置为0 
	}
	L.length=0;//长度置0 
}

二、动态分配的线性表

#define InitSize 10//初始长度 
typedef struct{
	int *data;
	int MaxSize=50,length=10;
}SeqList;
//初始化 
void InitList(SeqList &L){
	//用malloc动态分配 
	L.data=(int *)malloc(sizeof(int)*InitSize);
	L.length=0; 
	L.MaxSize=InitSize;
}
//动态增加数组长度
void IncresaseSize(SeqList &L,int len){
	//指针指向就的数组 
	int *p=L.data;
	//分配新数组 
	L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
	for(int i=0;i<L.length;i++){
		L.data[i]=p[i];
	}
	L.MaxSize+=len;
	free(p);
} 

三、使用静态线性表演示其他操作

1、求表长

int Length(SqList L){
	return L.length;
}

2、按值查找

int LocateElem(SqList L,int e){
	int i;
	for(i=0;i<L.length;i++){
		if(L.data[i]==e)return i+1;
	}
	return 0;
}

3、按位序查找

int GetElem(SqList L,int i){
	return L.data[i-1];
}

4、插入操作

bool ListInsert(SqList &L,int i,int e){
	//判断i的范围 
	if(i<1||i>L.length+1)return false;
	//判断是否超出最大空间 
	if(L.length>=MaxSize)return false;
	//将i-1之后元素往后移一位 
	for(int j=L.length;j>=i;j--){
		L.data[j]=L.data[j-1];
	}
	L.data[i-1]=e;
	L.length++;
	//最好情况:新元素插入在表尾,不用移动元素O(1)
	//最坏情况:新元素插入到表头,需要移动n个元素O(n)
	//平均情况:假设插入到任何一个位置的概率相同,概率p=1/(n+1)
	//i=1时循环n次i=2时n-1次,...n=i+1时循环0次所以平均循环n/2次 ,O(n)
	//删除同理 
} 

5、删除操作

bool ListDelete(SqList &L,int i,int &e){
	if(i<1||i>L.length)return false;
	e=L.data[i-1];//被删除的元素保存到e
	//i之后的元素全部左移 
	for(int j=i;j<L.length;j++){
		L.data[j-1]=L.data[j];
	}
	L.length--; 
	return true;
}
void PrintList(SqList L){
	for(int i=0;i<L.length;i++){
		printf("%d\n",L.data[i]);
	}
}

6、判空

bool Empty(SqList L){
	return L.length==0;
}

7、销毁表

bool Destory(SqList &L){
	L.length=0;
}

四、测试

int main(){
	SqList L;
	int e=0;
	InitList(L);
	ListInsert(L,1,10);
	ListInsert(L,2,11);
	ListInsert(L,3,12);
	ListInsert(L,4,13);
	ListInsert(L,5,14);
	ListInsert(L,6,15);
	ListInsert(L,7,16);
	ListInsert(L,8,17);
	ListInsert(L,9,18);
	ListInsert(L,10,19);
	ListInsert(L,11,20);
	PrintList(L);
	e=LocateElem(L,15);
	printf("被e=%d\n",e);
	e=GetElem(L,3);
	printf("被e=%d\n",e);
	ListDelete(L,7,e);
	printf("被删除的是%d\n",e);
	PrintList(L);
	Destory(L);
	PrintList(L);
	return 0; 
}

猜你喜欢

转载自blog.csdn.net/weixin_46919419/article/details/113615772