序:又要重新开始学习数据结构了,这次我一定要赢!哈哈哈哈,考研人加油!尽量争取把数据结构的代码都敲一遍。
线性表的概念: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;
}
如有错误,敬请指正!