数据结构算法线性表总结

Posted lim-m

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构算法线性表总结相关的知识,希望对你有一定的参考价值。

一、数据结构

技术图片

1.存储结构是逻辑结构是映射

2.逻辑结构与存储结构的关系

? 存储结构是逻辑结构在计算机中的存储形式

? 同一逻辑结构可以对应多种存储结构

? 同样的操作在不同的存储结构上,实现方法不同

二、算法

技术图片

1.递归O()计算:

技术图片

? ?时间复杂度的关系:

? O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)

? 指数时间的关系为: 

? O(2n)<O(n!)<O(nn)

技术图片

? ?最好时间复杂度

? 算法在最好情况下的时间复杂度

? ? 最坏时间复杂度

? 算法在最坏情况下的时间复杂度,确定了算法执行时间的上界。

? ? 平均时间复杂度

? 算法在所有可能情况下,按照输入实例以等概率出现时,算法计算量的加权平均值。

? ?更关心最坏情况下和平均情况下的时间复杂度。

? ?很多情况下,算法的平均时间复杂度难于确定,通常只考虑最坏情况下的时间复杂度。

3.算法存储空间分析

? ? 算法的空间效率

? 算法的执行过程中,所占据的辅助空间数量

? ? 空间复杂度

? 算法在运行过程中临时占用的存储空间的度量

? ?一般也是问题规模n的的函数S(n)=O(g(n))

? ?算法的时间复杂度与空间复杂度相互影响。

? ?好的时间复杂度,可能会导致占用较多存储空间

? ? 通常情况下:

? 鉴于运算空间较为充足,常以算法的时间复杂度作为算法优劣的衡量指标。

三、线性表

技术图片

1.顺序技术图片

2.链式技术图片

3.建立单链表

? ?头插法

? 思路:生成一个空表,不断将新节点插入链表表头

void CreateListF(LinkList *&L, ElemType a[], int n)
{ 	
	LinkList *s;
	int i;
	L = new LNode;
    L->next = NULL; //创建头节点,其next域置为NULL
	for (i=0; i<n; i++) { //循环建立数据节点
		s = new LNode; 
		s->data = a[i]; //创建数据节点*s
		s->next = L->next; //将*s插在原开始节点之前,头节点之后
		L->next = s;
	}
}

? 链表的节点顺序与逻辑次序相反

? ?尾插法

? 思路:将新节点始终插入链表表尾,需要一个尾指针r

void CreateListR(LinkList *&L, ElemType a[], int n)
{ 
	LinkList *s,*r;
	int i;
	L = new LNode; //创建头节点
	r=L; //r始终指向尾节点,开始时指向头节点
	for (i=0; i<n; i++) { //循环建立数据节点
		s = new LNode;
		s->data = a[i]; //创建数据节点*s
		r->next = s; //将*s插入*r之后
		r = s;
	}
	r->next = NULL; //尾节点next域置为NULL
}
四、栈与队列

技术图片

? ? 链栈

? 无需附加头结点,栈顶指针就是链表(即链栈)头指针

五、串

技术图片

? next函数

技术图片

以上是关于数据结构算法线性表总结的主要内容,如果未能解决你的问题,请参考以下文章

数据结构算法及线性表总结

[数据结构与算法] 线性表总结

数据结构算法及线性表总结

数据结构和算法学习总结03 线性表---顺序表

数据结构算法及线性表总结

数据结构与算法-线性表和散列表的总结