数据结构-顺序表

本文介绍了数据结构中顺序表的概念,包括顺序表的插入、删除和查找操作,并分析了它们的时间复杂度。通过C++实现了一个动态顺序表,展示了相关操作的代码示例。此外,还提供了顺序表操作的性能评估,帮助理解数据结构的基础知识。
摘要由CSDN通过智能技术生成

序:又要重新开始学习数据结构了,这次我一定要赢!哈哈哈哈,考研人加油!尽量争取把数据结构的代码都敲一遍。

线性表的概念:n个具有相同特性的数据元素的有限序列。

顺序表相对于数据结构的其他知识而言比较简单,可以单纯的看做数组,可以随意存取,时间复杂度为O(1)。(突然想到主定理也忘记了,我是fw)

看王道上的代码,只有插入删除和查找,这里也简单的实现这几种方法。(完整代码在最下边)

顺序表的插入:给定插入位置、和插入元素,将数据插入到指定位置。

时间复杂度分析:

最好的情况下,在最后的位置插入元素,时间复杂度为O(1)

最坏的情况下,在表头插入元素,时间复杂度为O(n)

平均情况下,平均移动次数n/2次,故时间复杂度为O(n)

bool InsertSqList(SqList &L,int i,int e){    
	if(i<1||i>MAXSIZE){
		cout<<"error"<<endl;
		return false;
	}
	for(int j = L.empty;j>=i;j--){
		L.data[j] = L.data[j-1];
	}
	L.data[i-1] = e;
	L.empty++;
	return true;
}

顺序表的删除:给定删除元素的位置,删除数据

时间复杂度分析:

最好情况下:删除最后一个元素,O(1)

最坏情况下:删除第一个元素,其他元素前移一位,O(n)

平均情况下:平均移动次数(n-1)/2,时间复杂度O(n)

bool DeleteSqList(SqList &L,int i){
	if(i<1||i>MAXSIZE){
		cout<<"error\n";
		return false;
	}
	for(int j=i;j<L.empty;j++){
		L.data[j-1] = L.data[j];
	}
	L.empty--;
	return true;
} 

顺序表的查找:查找给定元素在顺序表中的位置

时间复杂度分析:

最好情况:第一个就是查找的元素,O(1)

最坏情况:查到最后一个元素,或者查无此元素,时间复杂度为O(n)

平均情况下:平均比较次数(n+1)/2,试讲复杂度O(n)

bool ResearchSqList(SqList L,int e){
	for(int i=0;i<L.empty;i++){
		if(L.data[i] == e){
			cout<<i+1<<endl;
			return true;
		}
	}
	return false;
}

完整代码: 

//这里使用c++实现,顺序表
//这里是一个动态的顺序表

#include<iostream>

#define MAXSIZE 100
using namespace std;
typedef int ElemType;

typedef struct{
	ElemType *data;
	int empty;
}SqList;

void InitSqList(SqList &L){
	L.data = new ElemType[MAXSIZE];
	L.empty = 0;
}
bool InsertSqList(SqList &L,int i,int e){
	if(i<1||i>MAXSIZE){
		cout<<"error"<<endl;
		return false;
	}
	for(int j = L.empty;j>=i;j--){
		L.data[j] = L.data[j-1];
	}
	L.data[i-1] = e;
	L.empty++;
	return true;
}
bool DeleteSqList(SqList &L,int i){
	if(i<1||i>MAXSIZE){
		cout<<"error\n";
		return false;
	}
	for(int j=i;j<L.empty;j++){
		L.data[j-1] = L.data[j];
	}
	L.empty--;
	return true;
} 
bool ResearchSqList(SqList L,int e){
	for(int i=0;i<L.empty;i++){
		if(L.data[i] == e){
			cout<<i+1<<endl;
			return true;
		}
	}
	return false;
}
void printSqList(SqList &L){
	for(int i = 0; i<L.empty;i++){
		cout<<L.data[i]<<" ";
	}
	cout<<endl;
} 
void destorySqList(SqList &L){
	delete[] L.data;
}
int main()
{
	SqList L;
	InitSqList(L);
	InsertSqList(L,1,5);
	InsertSqList(L,2,7);
	InsertSqList(L,3,3);
	InsertSqList(L,4,6);
	InsertSqList(L,1,51);
	printSqList(L);
	DeleteSqList(L,3);
	printSqList(L);
	ResearchSqList(L,6);
	destorySqList(L);
	return 0;
 } 

 如有错误,敬请指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值