数据结构-线性表的顺序存储结构

顺序表(Sequence List)

顺序存储定义:逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。

任一元素均可随机存取

复制代码
#define MAXSIZE 100
typedef struct
{
	ElemType *elem;//elem指向空间的基地址
	int length;//当前长度
}SqList;//顺序表的结构类型为SqList
SqList L;//定义一个线性表变量

Status InitList(SqList &L)
{
	//L.elem=(ElemType*)malloc(sizeof(ElemType)*MaxSize);//内存动态分配
	L.elem=new ElemType[MAXSIZE];//此为C++的动态分配存储,释放时  delete 指针
	if(!L.elem) 
		exit(OVERFLOW);//存储分配失败退出
	L.length=0;
	return OK;
}

malloc(m)函数:开辟m字节长度的地址空间,并返回这段空间的首地址

sizeof(x)运算:计算变量x的长度

free(p)函数:释放指针p所指变量p所指变量的存储空间,即彻底删除一个变量

(ElemType*):强制类型转换为ElemType的指针

需要加载头文件 : <stdio.h>

逻辑位序和物理位序相差1,例如逻辑上第1个元素存储在下标为0的位置上

复制代码
Status GetElem(SqList L,int i,ElemType &e)
{
	if(i<1||i>L.Length)
		return error;
	e=L.elem[i-1];
	return OK;
}

Status LocateElem(SqList L,ElemType e)
{
	for(i=0;i<L.Length;i++)
	{
		if(L.elem[i]==e)
		{
			return i+1;
		}else{
			return 0;
		}
	}
}

平均查找长度ASL(Average Search Length)/期望值

对含有n个记录的表,查找成功时:

顺序查找方法查找成功的平均 比较次数约为表长的一半。当待查找元素不在查找表中时,也就是扫描整个表都没有找到,即比较了n次,查找失败:

复制代码
/**
在表的第i个位置插入一个新的数据元素e
算法步骤:
1.判断插入位置是否合法,合法范围为1<=L.length<=L.length+1
2.判断存储空间是否已满
3.将最后一个元素到第i位置的元素依次后移
4.将新元素放入第i个位置
5.表长加1
**/
Status ListInsert(SqList &L,int i,ElemType e)
{
	if((i<1)||(i>L.length+1)){
		return error;
	}
	if(L.Length=MAXSIZE){
		return error;
	}
	for(j=L.length-1;j>=i-1;j--){
		L.elem[j+1]=L.elem[j];
	}
	L.elem[i-1]=e;
	L.length=L.Lengh+1;
	return OK;
}

/**
将表的第i个元素删除
算法步骤:
1.判断插入位置是否合法,合法范围为1<=i<=n
2.将第i+1个至第n个元素依次向前移动
3.表长-1
**/
Status ListDelete(SqList &L,int i)
{
	if((i<1)||(i>L.length)){
		return error;
	}
	for(j=i;j>=L.length-1;j++){
		L.elem[j-1]=L.elem[j];
	}
	L.length=L.Lengh-1;
	return OK;
}

下一节:数据结构-线性表的链式存储结构

相关推荐
找不到、了8 分钟前
关于B+树的介绍
数据结构·b树·mysql
弥彦_15 分钟前
贪心算法经典问题
c++·算法
lboverfys28 分钟前
贪心算法之分发饼干(一)
算法·贪心算法
这张生成的图像能检测吗1 小时前
生成对抗网络(GANs)入门介绍指南:让AI学会“创造“的魔法(二)【深入版】
人工智能·pytorch·深度学习·神经网络·算法·生成对抗网络·计算机视觉
qq_534452521 小时前
【算法 day02】LeetCode 209.长度最小的子数组 | 59.螺旋矩阵II
java·算法·leetcode·职场和发展
dying_man1 小时前
LeetCode--31.下一个排列
算法·leetcode
IC 见路不走1 小时前
LeetCode 第75题:颜色分类
数据结构·算法·leetcode
Navigator_Z1 小时前
LeetCode //C - 757. Set Intersection Size At Least Two
c语言·算法·leetcode
Blue.ztl2 小时前
DP刷题练习(二)
算法·cpp
青山是哪个青山2 小时前
位运,模拟,分治,BFS,栈和哈希表
算法·散列表·宽度优先