2020王道考研数据结构-顺序表定义与基本操作

对比王道每年的书,暂时没有发现较大的出入之处,在自己电脑用dec++敲下相关章节的基本代码,保存在本站做个记录。

InitList(&L)//初始化,构造空的线性表、
Length(L)// 表长,数据元素个数
LocateElem(L,e)//按值查找
GetElem(L,i) //按位查找 
ListInsert(&L,i,e)//插入操作
ListDelete(&L,i,&e)//删除i位置的元素,并用e返回。 
Printlist(L)//按前后顺序输出表中的元素
Empty(L) //判空操作,返回布尔
DestroyList(&L) //销毁并释放空间 


线性表顺序存储类型描述 结构化定义 线性表元素类型 ElemType 
#define MaxSize 50 		//定义线性表最大长度
typedef struct{ 				//结构化定义 
	ElemType data[MaxSize];  //顺序表的元素 
	int length; 		//顺序表的当前长度 
}sqList;  				//顺序表的类型定义 

线性表动态分配
#define InitSize 100        //表长度的初始定义
typedef struct{
	ElemType *data;       //动态分布的数组指针 
	int MaxSize,Length;  //数组最大容量和当前个数 
}Seqlist;               //动态分配数组顺序表的类型定义 
    
c的初始动态分配语句
L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize) 
c++的动态分配
L.data=new ElemType[InitSize] 
顺序表插入操作
bool ListInsert(SqList &L,int i,ElemType e){//将e插入到L顺序表的第i位置
	if(i<1||i>L.length+1) 
	return false;
	if(L.length>=MaxSize)
	return false;//以上都是判断 
for(int j=L.length;j>=i;j--)//注意for循环规则 
	L.data[j]=L.data[j-1];//i后的元素后移一位 
	L.data[i-1]=e;//数组 故要i-1
	L.length++;
	return true;
}/*L.length是位序 而L.data是数组 */ 
	最好情况:表尾插入i=n+1 ,不执行语句 O(1)
	最坏情况:表头插入i=1 ,n 条语句执行,O(n)
	平均情况:插入一个结点的概率,p=i/(n+1)  平均移动次数 n/2.  O(n) 
	
	
	删除操作  删除第i位置的元素 
	
bool ListDelete(Sqlist &L,int i,Elemtype &e) {
	if(i<1||i>L.length)
	return false;
	e=L.data[i-1] ;
	for(int j=i;j<=L.length;j--)
	L.data[j-1]=L.data[j];
	L.length--;
	return true;
}
 	最好情况:表尾删除i ,不移动 O(1)
	最坏情况:表头删除,需要移动n-1个元素,时间复杂度O(n)
	平均情况:删除一个结点的概率,p=1/n 移动次数 n-i  平均移动次数 n-1/2.  O(n) 
	
	
	
	按值顺序查找
	查找e,并返回其位序
	思想:数组循环遍历,返回i+1 位序 
int LocateElem(SqList L,ElemType e){
	int i;
	for(i=0;i<=L.length;i++)
	 if(L.data[i]=e);
	 	return i+1;
	 return 0;
}

    最好情况:表头i ,一次就好 O(1)
	最坏情况:表尾,需要比较n个元素,时间复杂度O(n)
	平均情况:查找一个结点的概率,p=1/n 查找次数 i  平均查找次数 n+1/2.  O(n) 	
	
	
		

 

你可能感兴趣的:(数据结构考研)