数据结构——概述

什么是数据结构

数据结构主要研究非数值计算程序问题中的操作对象以及他们之间的关系,不是研究复杂的算法。

数据结构中的基本概念

数据

什么是数据?
程序操作对象,用于描述客观事物

数据的特点:

  • 可以输入到计算机
  • 可以被计算机处理

数据是一个抽象的概念,将其分类后得到程序设计语言中的类型,如int、float、char等。

数据元素:
组成数据的基本单位;
数据项:
一个数据元素由若干数据项组成;
数据对象:
性质相同的数据元素的集合,如数组,链表。

在这里插入图片描述

数据结构研究结点和结点之间的关系(数组、链表、图、树)

数据结构的逻辑关系

  • 集合:数据元素简除“同属于一个集合”外,无其他关系;
  • 线性结构:一个对一个如线性表、栈、队列;
  • 树形结构:一个对多个,如树;
  • 图状结构:多对多,如图。

数据的物理结构

物理结构也称为存储结构,是数据的逻辑结构在计算机存储内的表示,依赖于计算机。

可分为:顺序、链式、索引、散列。

最常用的存储结构:

  • 顺序存储结构:借助元素在存储器中的相对位置来表示元素间的逻辑关系;
  • 链式存储结构:借助指示元素存储地址的指针表示数据元素间的逻辑关系。

数据的运算

在数据的逻辑结构上定义的操作,它在数据的存储结构上实现。如插入、删除、修改、查找、排序。

算法

基本概念

算法是特定问题的求解步骤的描述,在计算机中表现为指令的有限序列,算法是独立存在的一种解决问题的方法和思想,对于算法,语言并不重要,重要的是思想。

数据结构和算法的区别

数据结构只是静态的描述了数据元素之间的关系,高效的程序需要在数据结构的基础上设计和选择算法。

程序=数据结构+算法

算法的特性
有穷性、确定性、可行性

算法效率的度量

  • 事后统计法:比较不同的算法对同一输入数的运行处理时间
    缺陷:

    • 为了获得不同算法的运行时间必须编写相应的程序;
    • 运行时间严重依赖硬件以及运行时的环境因素;
    • 算法的测试数据的选取相当困难;
  • 事前分析估算:依据统计的方法对算法效率进行估算;

影响算法效率的主要因素:

1.算法采用的策略和方法
2.问题的输入规模
3.编译器所产生的代码
4.计算机执行速度

O表示法(时间复杂度)

  • 判断一个算法的效率时,往往只需要关注操作数量的最高次项,其他次要项和常数项可以忽略;
  • 在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度。

常见时间复杂度

非正式术语
O(1)常数阶
O(n)线性阶
O(n^2)平方阶
O(logn)对数阶
O(nlogn)nlogn阶
O(n^3)立方阶
O(2^n)指数阶

关系O(1)< O(logn)< O(n)< O(n^2)< O(n^3)< O(2^n)< O(n!)< O(n^n)

算法的空间复杂度

算法的空间复杂度通过计算算法的存储空间
S(n)=O(f(n))

当算法执行时所需要的空间是常数时,空间复杂度为O(1);

牺牲空间

案例:
求出给定数组中出现次数最多的那个数。
方法:创建一个给定范围的新数组,用来缓存出现的次数,给定数组中元素每出现一次,将新数组中的这个元素-2为索引的元素加1次。

#include <stdio.h>
#include <windows.h>

int search(int a[]){
	int sp[10] = { 0 };
	int index = 0;
	for (int i = 0; i < 10; i++){
		sp[a[i] - 1] = sp[a[i] - 1] + 1;
		index = sp[a[i] - 1] > sp[index] ? a[i] - 1 : index;
	}
	return index + 1;
}

void main(){
	int a[10] = { 4, 2, 3, 4, 4, 1, 1, 1, 4, 4 };
	int num = search(a);
	printf("出现次数最多的数是:%d", num);
	system("pause");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值