数据结构课上笔记1

第一节课复习了c语言的一些知识,并简单介绍了数据结构这门课程。

 

1、引用和函数调用:

1.1引用:对一个数据建立一个“引用”,他的作用是为一个变量起一个别名。这是C++对C语言的一个重要补充。

用法很简单:

int a = 5;

int &b = a;

b是a别名,b与a代表的是同一个变量,占内存中同一个存储单元,具有同一地址。

注意事项:

  1. 声明一个引用,同时必须初始化,及声明它代表哪一个变量。(作为函数参数时不需要初始化)
     
  2. 在声明一个引用后,不能再作为另一变量的引用。

     3。不能建立引用数组。

1.2函数调用:

其实还是通过函数来理解了一下引用

void Myswap1(int a,int b)
{int c = a;a = b;b = c;
}void Myswap2(int &a,int &b)
{int c = a;a = b;b = c;
}void Myswap3(int *pa,int *pb)
{int c = *pa;*pa = *pb;*pb = c;
}

这三个函数很简单,第一个只传了值进来,不改变全局变量;而第三个也很熟悉,就是传递了地址,方便操作。依旧是“值传递”的方式,只不过传递的是变量的地址而已那二就彻底改变了这些东西,引用作为函数参数传入的实参就是变量,而不是数值,真正意义上的“变量传递”。

 

2、数组和指针:

这一块讲得比较简单,就是基本知识。

主要内容:

1、函数传数组就是传了个指针,这个大家都知道,所以传的时候你写arr[],里面写多少,或者不写,都是没关系的,那你后面一定要放一个变量来把数组长度传进来。

2、还有就是,定义:int arr[5],你访问越界是不会报错的,但是逻辑上肯定就没有道理了。那用typedef int INTARR[3];访问越界,在vs上会报错,要注意。

3、再说一下指针和数组名字到底有什么区别?这本来就是两个东西,可能大家没注意罢了。

第一:指针可以自增,数组名不行,因为是常量啊。

第二:地址不同,虽然名字[n],都可以这样用,但是数组名地址就是第一个元素地址。指针地址就是那个指针的地址,指针里存的才是第一个元素地址。

第三:sizeof(),空间不一样,数组是占数组那么大空间。指针是四个字节。

本来就是俩东西,这么多不同都是本质不同的体现。

3、结构体:

也是讲的基本操作,基本就是这个东西:

typedef struct Date
{int Year;int Month;int Day;struct Date *pDate;
}Date, *pDate;

1、内部无指向自己的指针才可以第一行先不起名字。

2、内部不能定义自己的,如果能的话那空间不就无限了么。很简单的逻辑

 

指针我不习惯,还是写Date *比较顺眼

3、有同学没注意:访问结构体里的东西怎么访问?

Date.这种形式,或者有指向这个节点的指针p可以p->这种形式,别写错了。

 

4、还有就是结构体能直接这么赋值:

   Date d1 = {2018,9,11};

我竟然不知道,以前还傻乎乎的一个一个赋值呢。

 

5、还有,想写一下结构体有什么优点。。

这一块可能写的就不好了,因为不是老师讲的。。

比如学生成绩,如果不用结构体,我们一个学生可能有十几个信息,那定义变量和操作就很烦琐了,数据结构有一种松散的感觉。用一个结构体来表示更好,无论是程序的可读性还是可移植性还是可维护性,都得到提升。还有就是函数调用的时候,传入相当多的参数,又想操作或者返回,那是很麻烦的事。现在只传入一个结构体就好了,操作极其简单。总结一下就是好操作,中看中用,有机地组织了对象的属性。以修改结构体成员变量的方法代替了函数(入口参数)的重新定义。

基本就这样吧。

6、还有就是它了:typedef int INTARR[3];这样直接定义了一个数据类型,长度为3的数组,然后直接这样用就可以了:

INTARR arr1;

 

回忆完C语言储备知识,然后讲了数据结构的基本概念

 

数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及他们之间的关系和操作等的学科。

数据:是对客观事物的符号表示,在计算机中指能输入到计算机中并被处理的符号总称。

数据元素:数据的基本单位

数据项:数据的不可分割的最小单位

数据对象:性质相同的数据元素的集合。

举例:动物是数据,某只动物是数据元素,猫狗是数据对象,颜色可以是数据项。

 

数据元素之间存在某种关系,这种关系成为结构。

四种基本结构:

集合:除了同属一个集合无其他关系。

线性结构:一对一的关系

树形结构:一对多的关系

图状结构:多对多的关系

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

并查集实现

并查集是什么东西? 它是用来管理元素分组情况的一种数据结构。 他可以高效进行两个操作: 查询a,b是否在同一组合并a和b所在的组 萌新可能不知所云,这个结构到底有什么用? 经分析,并查集效率之高超乎想象…

字符串上的简单动态规划

因为数据结构快学串了,以前又做过一些字符串dp的题,今天突然就想把它们写在一起吧。 直接开始 问题1:给两个字符串,求最长公共子串 问题2:给两个字符串,求最长公共子序列 问题3:给一个字符串…

线段树简单实现

首先,线段树是一棵满二叉树。(每个节点要么有两个孩子,要么是深度相同的叶子节点) 每个节点维护某个区间,根维护所有的。 如图,区间是二分父的区间。 当有n个元素,初始化需要o(n)时间&#xf…

树状数组实现

树状数组能够完成如下操作: 给一个序列a0-an 计算前i项和 对某个值加x 时间o(logn) 注意:有人觉得前缀和就行了,但是你还要维护啊,改变某个值,一个一个改变前缀和就是o(n)了。 线段树树状数组的题就是这样&#x…

数据结构课上笔记2

今天继续说明了一些基本概念,讲解了时间空间复杂度。 (对于概念的掌握也很重要) 元素之间的关系在计算机中有两种表示方法:顺序映像和非顺序映像,由此得到两种不同的储存结构: 顺序存储结构和链式存储结构…

双端单调队列

上次我们介绍了单调栈结构https://blog.csdn.net/hebtu666/article/details/82717317 这次介绍一种新的数据结构:双端队列:双端队列是指允许两端都可以进行入队和出队操作的队列,其元素的逻辑结构仍是线性结构。将队列的两端分别称为前端和后…

KMP子字符串匹配算法学习笔记

文章目录学习资源什么是KMP什么是前缀表为什么一定要用前缀表如何计算前缀表前缀表有什么问题使用next数组来匹配放码过来构造next数组一、初始化二、处理前后缀不相同的情况三、处理前后缀相同的情况使用next数组来做匹配代码总览测试代码时间复杂度分析学习资源 字符串&…

数组实现队列

数组实现队列结构: 相对栈结构要难搞一些,队列的先进先出的,需要一个数组和三个变量,size记录已经进来了多少个元素,不需要其它萌新看不懂的知识。 触底反弹,头尾追逐的感觉。 循环使用数组。 具体解释…

栈/队列 互相模拟实现

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路:大概这么想:用一个辅助栈把进第一个栈的元素倒一下就好了。 比如进栈1,2,3,4,5 第一个栈: 5 …

数据结构课上笔记3

这节课介绍了线性表结构和顺序表示的一部分内容。 操作太多,而且书上有,就不一一介绍分析了。 线性表定义:n个数据元素的有限序列。 特点: 存在唯一一个称作“第一个”的元素。存在唯一一个称作“最后一个”的元素除最后一个元…

内存分区

之前一直比较懵,想想还是单独写一个短篇来记录吧 一般内存主要分为:代码区、常量区、静态区(全局区)、堆区、栈区这几个区域。 代码区:存放程序的代码,即CPU执行的机器指令,并且是只读的。 常…

栈的排序

一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但是不能申请额外的数据结构,如何完成排序? 思路: 将要排序的栈记为stack,申…

双链表实现

以前写的不带头的单链表实现,当时也啥也没学,好多东西不知道,加上一心想压缩代码,减少情况,所以写得不太好。 请教了老师,首先是命名问题和代码紧凑性等的改进。还有可读性方面的改进,多写了一…

数据结构作业1 讲解和拓展

原题来自雪梨教育 http://www.edu2act.net/task/list/checked/ 题后给出讲解和扩展 任务1_1 比较下列算法的时间复杂度 任务描述: 下面给出4个算法,请分析下列各算法的时间复杂度,请写清楚题号,并将每个小题的分析过程写出来&…

KMP+DP1

Description 求一个字符串的所有前缀在串中出现的次数之和 Input 多组用例,每组用例占一行为一个长度不超过100000的字符串,以文件尾结束输入 Output 对于每组用例,输出该字符串的所有前缀在串中出现的次数之和,结果模256 Samp…

数据结构课上笔记5

介绍了链表和基本操作 用一组物理位置任意的存储单元来存放线性表的数据元素。 这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。因此,链表中元素的逻辑次序和 物理次序不一定相同。 定义: …

并查集入门三连:HDU1213 POJ1611 POJ2236

HDU1213 http://acm.hdu.edu.cn/showproblem.php?pid1213 问题描述 今天是伊格纳修斯的生日。他邀请了很多朋友。现在是晚餐时间。伊格纳修斯想知道他至少需要多少桌子。你必须注意到并非所有的朋友都互相认识,而且所有的朋友都不想和陌生人呆在一起。 这个问题…

Java设计模式(2 / 23):观察者模式

定义 观察者(Observer)模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 OO设计原则:为了交互对象之间的松耦合设计而努力。 案例:气…

二叉树概述

各种实现和应用以后放链接 一、二叉树的基本概念 二叉树:二叉树是每个节点最多有两个子树的树结构。 根节点:一棵树最上面的节点称为根节点。 父节点、子节点:如果一个节点下面连接多个节点,那么该节点称为父节点,它…

Java设计模式(1 / 23):策略模式

定义 策略(Strategy)模式定义了算法族,分别封装起来,让它们之间可以互相替换 ,此模式让算法的变化独立于使用算法的客户。 案例:模拟鸭子应用 一开始 新需求:模拟程序需要会飞的鸭子 在父类新…