数据结构之概念,算法,线性表

前言

数据结构在我们编程的过程中是不可避免要遇到的,我们可以去通过学习而选择更高效的数据结构,进而减少我们对内存使用,带来更高的储存效率

基本概念

数据结构为数据,结构,基本操作的结合

数据

数据分为两类,分别为数值型数据和非数值型数据

数值型数据

为 flaot,int,char,long等等

非数值型数据

为文字,音频,视频,字符等

结构

结构是用于表示非数据型数据。分为逻辑结构和储存结构

逻辑结构
线性结构(数据为一对一)

线性表:数据都可以从两头进入或者出去(但不是同时)
栈:可以理解为一个瓶子,数据先进先出,后进后出
队列:队列和线性表差不多,不过他是规定了出口和入口,而线性表是随意的

非线性结构(数据为一对多&多对多)

集合:集合可以理解为用一个容器把数据放在一起,就可以称为集合
树&二叉树: 可以理解为想树根的样子,从一点分出来很多分支,树和二叉树的区别就在于二叉树一次只能分出来两个,而树可以分出来多个(一对多)
图&网:就是可以随便的发散,随便的连接。数和图的区别在于有权和无权,(有权就是会比较出特别的连接)其中网是有权的,图是无权的(多对多)

最后在对数据的基本变形中只有增加,删除,修改,查询,排序

数据结构的算法

算法的特征:
有穷型:就是可以看到尽头,其中死循坏不算,死循坏可以看到结果
确定性:可以知道有什么目的
其余还有可行性,输入,输出

算法的评估
时间复杂度

表达式:t(n)=o(n)
意义:其含义是一个关于时间时间的量级
常量阶(一个语句,或者一层循环)
线性阶 (一次循环) 平方阶(两层嵌套循环) 立方阶(三层嵌套循环)

计算过程:

1、将所有执行语句的频度相加,形成一个多项式
2、将多项式的常数项去掉
3、保留最高阶的多项式
4、去掉最高阶的系数
5、剩余的n的关系式就是时间复杂读的量级
6、时间复杂度有最优和最差情况下的不同量级。
例如

#include <stdio.h>

int main(int argc, char *argv[])
{
	int  a=20,b=30;
	int i,c;
	for (i=1;i<20;i++)
	{	
		if (a%i==0 && b%i==0)
		{	
			c=i;
		}
		
	}

			printf ("%d\n",c);
    return 0;
}

这个函数的时间复杂度就为 n,其实这个算法要去掉常数,系数,最小的,最后大小就是最大的那个嵌套循环。

空间复杂度

根据程序执行过程中的临时申请变量所占内存空间比形成的量级(栈区申请的就为临时变量)

数据结构的线性结构之线性表

线性表:包含若干个数据元素的线性序里,其中
a0 为首元素,没有直接前趋
an 为尾元素,没有直接后继
ai 为中间元素,有且仅有一个直接前趋和直接后继
公式表示: L = (D,R);
L 线性表,D 数据元素 ,R 代表数据元素之间的关系
线性表的存储:
1、顺序存储 ===》顺序表 ==》数组(就是连续的连在一起)
2、链式存储 ===》单链表 ==》链表(就是用一根链条把不连续的连起来)

发布了31 篇原创文章 · 获赞 8 · 访问量 579

猜你喜欢

转载自blog.csdn.net/dongdong7_77/article/details/99094883
今日推荐