首页 > 其他分享 >数据结构day1

数据结构day1

时间:2024-09-27 18:49:17浏览次数:3  
标签:存储 struct 复杂度 day1 算法 数据结构 数据 结构

目录

1.1数据

1.2逻辑结构

1.3存储结构

1)顺序存储结构

2)链式存储结构

1.4操作(数据的运算)

2.1算法与程序

2.2算法与数据结构

2.3算法的特性

2.4如何评价一个算法的好坏?

2.5时间复杂度

2.6空间复杂度


数据结构

数据的逻辑结构、存储结构、数据的操作(数据的运算)

1.1数据

数据:不再是单一的数值,类似集合

数据元素:数据的基本单位,由若干数据项组成

数据项:数据的最小单位,描述数据元素信息

节点:就是数据元素

1.2逻辑结构

逻辑结构:元素与元素之间的关系

1)线性关系 ---》线性结构 -----》一对一 ----》线性表

2)层次关系 ---》树形结构 -----》一对多 ----》树

3)网状关系 ---》图状结构 ----》多对多 ---》图

1.3存储结构

存储结构:数据的逻辑结构在内存中的具体实现

1)顺序存储结构

数组:在内存当中一段连续的内存空间中保存数据(如c语言中的一维数组)

2)链式存储结构

特点:内存不连续,通过指针进行连接

链表结构体:

struct node_t

{

int data;//数据域

struct node_t * next ;//指针域,存放下一个节点的地址

};

struct node_t A = {1,NULL};

struct node_t B = {2,NULL};

struct node_t C = {3,NULL};

  1. next = &B;
  2. next = &C;

  1. 索引存储结构

提高查找速度

索引表 + 数据文件

姓氏 + 地址 名字 + 电话号码

  1. 散列存储结构

数据在存储的时候与关键码之间存在某种对应关系

存的时候按照对应关系存

取的时候按照对应关系取

1.4操作(数据的运算)

增、删、改、查

  • 算法

2.1算法与程序

程序:用计算机语言对算法的具体实现

2.2算法与数据结构

算法 + 数据结构 = 程序

算法的设计:取决于选定的逻辑结构

算法的实现:依赖于采用的存储结构

2.3算法的特性

1)有穷性 //算法的执行步骤是有限的

2)确定性 //每一个步骤都有明确含义,无二义性

3)可行性 //能够在有限的时间内完成

4)输入

5)输出

2.4如何评价一个算法的好坏?

正确性 :保证算法可以正确实现功能

易读性 :容易被解读

健壮性 : 容错处理

高效性 :执行效率,算法执行快慢容易受到计算机性能的影响,

不可以作为评判算法高效性的标准,这通过可执行语句重复执行

次数来衡量算法是否高效 。(时间复杂度)

低存储型 : 占用空间少

2.5时间复杂度

算法的可重复执行语句执行的次数

通常时间复杂度用一个问题规模函数来表达

T(n) = O(f(n))

T(n) //问题规模的时间函数

n //问题规模,输入量的大小

O //时间数量级

f(n) //算法的可执行语句重复执行的次数 用问题规模n的某个函数f(n)来表达

例1:

求1+2+3+..+n

方法1:

int sum = 0;

for(i=1;i<=n;i++) n==10,10次 n==10000,10000次

sum+=i;

f(n) = n

T(n) = O(n)

方法2:

等差数列{an}的通项公式为:an=a1+(n-1)d。前n项和公式为:Sn=n*a1+n(n-1)d/2或Sn=n(a1+an)/2 。

int sum = n(1+n)/2; n==100 ,1次;

f(n) = 1

T(n) = O(1)

例2:

int i,j;

for(i=0;i<n;i++)

for(j=0;j<n;j++)

printf("ok\n");

f(n) = n^2;

例3:

int i,j;

for(i=0;i<n;i++)

for(j=0;j<=i;j++)

printf("ok\n");

i       次数

0       1

1        2

2        3

n-1      n

f(n) = 1+2+3+...+n = (1+n)n/2 = n/2+n^2/2

n^2

计算大O的方法:

(1)根据问题规模n写出表达式 f(n)

(2)只保留最高项,其它项舍去

(3)如果最高项系数不为1,除以最高项系数

(4)如果有常数项,置1

f(n) = 8; O(1)

f(n)= 3n^5 + 2n^3 + 6*n^6 + 10 ; O(n^6)

2.6空间复杂度

算法占用的空间大小。一般将算法的辅助空间作为衡量空间复杂度的标准。

算法占用的存储空间包括:

1)输入输出数据所占空间

2)算法本身所占空间

3)额外需要的辅助空间

标签:存储,struct,复杂度,day1,算法,数据结构,数据,结构
From: https://blog.csdn.net/2301_77416261/article/details/142600276

相关文章

  • 数据结构顺序表
    顺序表、单向链表、单向循环链表、双向链表、双向循环链表、顺序栈、链式栈、循环队列(顺序队列)、链式队列1)逻辑结构:线性结构2)存储结构:顺序、链式3)特点:一对一,每一个节点最多有一个前驱和一个后继,首节点无前驱,尾节点无后继顺序表特点:内存连续(数组)1)逻辑结构:线性结构2......
  • Java中的栈数据结构及其应用
    Java中的栈数据结构及其应用栈是一种线性数据结构,遵循后进先出(LIFO)的原则,即最后插入的元素最先被移除。栈的基本操作包括入栈(push)、出栈(pop)和查看栈顶元素(peek)。本文将介绍栈的基本结构、操作及在JDK中的应用。栈的基本结构一个简单的栈可以用数组或链表实现,下面是基于链......
  • 数据结构编程实践20讲(Python版)—02链表
    本文目录02链表linked-listS1说明S2示例单向链表双向链表循环链表S3问题:反转单向链表求解思路Python3程序S4问题:双向链表实现历史浏览网页求解思路Python3程序S5问题:基于循环链表的玩家出牌顺序求解思路Python3程序往期链接01数组02链表linked-lis......
  • 【21 ZR联赛集训 day10】身经百战
    【21ZR联赛集训day10】身经百战显然每个怪物是独立的。我们考虑对操作建带权边,答案就是求最短路。但是点数太多,于是我们可以对怪物血量和所有\(a_i,b_i\)离散化一下,因为我们只需要考虑这些点,注意\(1\)也要离散化,因为我们需要考虑\(1\)。一个小优化,如果\(a_i>b_i\)且......
  • 【21 ZR联赛集训 day10】不知道高到哪里去了
    【21ZR联赛集训day10】不知道高到哪里去了二分答案。设敌人的速度是\(1\),二分我的速度\(v\),我可以从\(C\)走到\(T\)当对于每个我到达的点\(u\),敌人无法比我先到达,即敌人到达\(u\)最短用时比我大。先求敌人到每个结点的最短路,然后对于二分的一个\(v\),从\(C\)开始搜......
  • 【21 ZR联赛集训 day18】聚会
    【21ZR联赛集训day18】聚会给出一个由小的编号连向大的编号的DAG,有\(q\)次询问,每次给出\(t\)和若\(s\)个点,表示除这些点之外其他点到\(t\)的最大距离。问距离最远的那个结点编号。\(1\len\le10^5,1\lem\le2\times10^5,\sums\le10^5\)。根号分治。对每个点......
  • 【21 ZR联赛集训 day18】游戏
    【21ZR联赛集训day18】游戏给定长度为\(n\)的序列\(A,B\),每个数形如\(\frac{2^{p_1}3^{p_2}5^{p_3}7^{p_4}11^{p_5}13^{p_6}}{2^{p_7}3^{p_8}5^{p_9}7^{p_{10}}11^{p_{11}}13^{p_{12}}}\)。可以进行若干次操作,每次操作选定\(i(2\lei\len-1),(a_{i-1},a_i,a_{i+1})\gets......
  • 【21 ZR联赛集训 day10】跑得比谁都快
    【21ZR联赛集训day10】跑得比谁都快\(O(nq)\)做法显然,不讲。如果我们把所有红绿灯的位置\(mod(g+r)\),放到数据结构里,就可以\(O(\logn)\)的时间内找到第一个红灯的位置。然后我们预处理每个红绿灯红灯结束的时刻开始,走到终点要用的时间\(f_i\),DP倒序求解。对于每个询......
  • 【20联赛集训day10】玩游戏
    【20联赛集训day10】玩游戏给一个长度为\(n\)的序列,\(|a_i|\le10^{13}\)。给出一个\(k\)问从\(k\)出发不断向两端拓展,满足任何时刻的区间和\(\le0\),问能否拓展到区间\((1,n]\)。考虑贪心,分别维护\(k\)左边和右边的区间,维护一个指针。每次贪心地向一边走,走到能走到......
  • 【20zr提高组十连测day10】心
    【20zr提高组十连测day10】心首先不同的操作序列一定在某个时刻使数组内容不同,因此我们只需要统计合法的操作序列数量。一个合法的最终数组形如若干个\(1,M\),而且\(1,M\)之间可能有若干个\(x\),长度为\(n+1\)。造成这个数组的操作序列必须满足所有操作\(1,M\)按顺序排列,......