结构体-线性表-顺序表
作者:互联网
提示:新手对数据结构的学习
文章目录
- 前言
- 一、基本注意事项
- 二、基本操作
- InitList(&L)(构造一个空表)
- DestroyList(&L)(销毁线性表)
- ClearList(&L)(清空线性表)
- ListEmpty(L)(判断是否为空表)
- ListLength(L)(线性表的长度)
- GetElem(L,i,&e)(用e返回第i个元素的值)
- LocateElem(L,e,compare())(寻找第一个满足compare()元素的位序)
- PriorElem(L,cur_e,&pre_e)(寻找一个数据元素,并返回他的前驱)
- NextElem(L,cur_e,&nest_e)(寻找一个数据元素,并返回他的后继)
- ListInsert(&L,i,e) (在i位置插入一个元素e)
- ListDelete(&L,i,&e)(删除第i个元素,并返回给e)
- ListTraverse(L,visit())
- 每个基本操作的代码
- 1、InitList(&L)(构造一个空表)
- 2、DestroyList(&L)(销毁线性表)
- 3、ClearList(&L)(清空线性表)
- 4、ListEmpty(L)(判断是否为空表)
- 5、ListLength(L)(线性表的长度)
- 6、GetElem(L,i)(用e返回第i个元素的值)
- 7、LocateElem(L,e,compare())(寻找第一个满足compare()元素的位序)
- 8、PriorElem(L,cur_e,&pre_e)(寻找一个数据元素,并返回他的前驱)
- 9、NextElem(L,cur_e,&nest_e)(寻找一个数据元素,并返回他的后继)
- 10、ListInsert(&L,i,e) (在i位置插入一个元素e)
- 11、ListDelete(&L,i,&e)(删除第i个元素,并返回给e)
- 12、ListTraverse(L,visit())
- 三、综合运用
- 总结
前言
这篇文章仅供本人自己使用
一、基本注意事项
- 数据元素是最小的操作单位(数据项:一个数据元素包含一个或多个数据元素)
二、基本操作
InitList(&L)(构造一个空表)
操作结果:构造一个空的线性表L
DestroyList(&L)(销毁线性表)
初始条件:线性表L已经存在
操作结果:销毁线性表L
ClearList(&L)(清空线性表)
初始条件:线性表L已经存在
操作结果:将L重置为空表
ListEmpty(L)(判断是否为空表)
初始条件:线性表L已经存在
操作结果:若L为空表,则返回TRUE,否则返回FALSE
ListLength(L)(线性表的长度)
初始条件:线性表L已经存在
操作结果:返回L中的数据个数
GetElem(L,i,&e)(用e返回第i个元素的值)
初始条件:线性表L已存在,1<=i<=ListLength(L)
操作结果:用e返回L中第i个数据元素的值
LocateElem(L,e,compare())(寻找第一个满足compare()元素的位序)
初始条件:线性表L已经存在,compare()是数据元素判定函数
操作结果:返回L中第1个与e满足关系compare()的数据元素的位序。若这样的数据元素不存在,则返回值为0
PriorElem(L,cur_e,&pre_e)(寻找一个数据元素,并返回他的前驱)
初始条件:线性表L已存在
操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作失败,pre_e无定义
NextElem(L,cur_e,&nest_e)(寻找一个数据元素,并返回他的后继)
初始条件:线性表L已存在
操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,否则操作失败,next_e无定义
ListInsert(&L,i,e) (在i位置插入一个元素e)
初始条件:线性表L已存在,1<=i<=ListLength(L)+1
操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1
ListDelete(&L,i,&e)(删除第i个元素,并返回给e)
初始条件:线性表L已存在且非空,1<=i<=ListLength(L)
操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1
ListTraverse(L,visit())
初始条件:线性表L已经存在
操作结果:依次对L的每个数据元素调用函数visit(),一旦visit()失败,则操作失败
每个基本操作的代码
1、InitList(&L)(构造一个空表)
- 静态
void InitList( &L){
for(int i=0;i<MaxSize;i++)
L.data[i]=0;//将所有数据元素设置为默认初始值
L.length=0;//顺序表初始长度为0
}
注意:如果数组存满了怎么办??
答:直接放弃治疗,顺序表的表长在一开始决定之后就不可以更改
- 动态分配
//初始化线性表
void InitList(sqlist &L){
L.elem=new elemtype[max]; //new一块大小为max的区域,数据类型为elemtype
L.length=0;//初始化线性表长度
}
2、DestroyList(&L)(销毁线性表)
void DestroyList(sqlist &L){
if(L.elem) delete[] L.elem;//释放以L.elem开头的一块区域(前面new的区域)
L.elem=NULL;//将指针置空
L.length=0;//长度为0
}
3、ClearList(&L)(清空线性表)
void ClearList(sqlist &L){
L.length=0;//只要直接把表长至为0
}
4、ListEmpty(L)(判断是否为空表)
bool ListEmpty(sqlist L){
if(L.length==0) //顺序表长度为0,则为空
return ture;
else
return false;
}
5、ListLength(L)(线性表的长度)
int ListLength(sqlist &L){
return L.length;//直接返回表长
}
6、GetElem(L,i)(用e返回第i个元素的值)
elemtype GetElem(sqlist L,int i){
if(i>0&&i<=L.length) return L.elem[i-1]; //直接判断i是否符合条件
else{
cout<<"i不合理"<<endl;// 不符合条件的
exit(-2);
}
}
7、LocateElem(L,e,compare())(寻找第一个满足compare()元素的位序)
int LocateElem(sqlist L,elemtype e) {
for(int i=0;i<L.length;i++)//运用一个循环去遍历每一个元素
if(L.elem[i]==e) return i+1;
return 0;
}
8、PriorElem(L,cur_e,&pre_e)(寻找一个数据元素,并返回他的前驱)
9、NextElem(L,cur_e,&nest_e)(寻找一个数据元素,并返回他的后继)
10、ListInsert(&L,i,e) (在i位置插入一个元素e)
int ListInsert(sqlist &L,int i,elemtype e){
if(i<1||i>L.length+1) return 0; //不满足顺序表的范围
if(L.length==max) return 0; // 判断线性表是否已满
for(int j=L.length-1;j>=i-1;j--) //通过for去满足移位(注意倒序)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=e; //在第i个位置插入元素e
++L.length;//长度加一
return 1;
}
11、ListDelete(&L,i,&e)(删除第i个元素,并返回给e)
int ListDelete(sqlist &L,int i){ //不可以用delete,系统关键字
if((i<1)||(i>L.length)) return 0;//判断i是否满足条件
for(int j=i;j<=L.length-1;j++)//注意length-1(去掉一个元素,长度减一
L.elem[j-1]=L.elem[j];//从第i位开始移动(即elem[i-1]开始)
--L.length;//顺序表减一
return 1;
}
12、ListTraverse(L,visit())
三、综合运用
2.读入数据
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
标签:返回,顺序,空表,线性表,int,元素,cur,结构 来源: https://blog.csdn.net/qq_51829607/article/details/115264105