其他分享
首页 > 其他分享> > 结构体-线性表-顺序表

结构体-线性表-顺序表

作者:互联网

提示:新手对数据结构的学习

文章目录


前言

这篇文章仅供本人自己使用


一、基本注意事项

二、基本操作

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