数据结构与算法基本

栈的算法:

计算机内部空间是连续存储的,但是可以通过逻辑上改变内存的物理结构,数据在内存上呈现出的是连续分布状态

主要的典型数据结构

在实现栈这种数据结构时,首先要定义一个数组和一个变量。数组中所包含的元素个数就是栈的大小(栈中最多能存放多少个数据)。

变量中则存储着一个索引,指向存储在栈中最顶端的数据,该变量被 称为“栈顶指针”。

栈的大小可以根据程序的需求任意指定。假设最多 也就有 100 个数据,那么定义一个能把它们都存储下来的栈就可以了, 这样的话就可以定义一个元素数为 100 的数组。这个数组就是栈的基础。

接下来编写两个函数,一个函数用于把数据存入到栈中,也叫作压入到栈中;另一个函数用于从栈中把数据取出来,也叫作从栈中弹出来。在这两个函数中,都需要更新栈中所存储的数据的总数,以及更 新栈顶指针的位置。也就是说通过使用由数组、栈顶指针以及入栈函 数和出栈函数所构成的集合,就能实现栈这种数据结构了

 

2.了解结构体的组成:

要想理解用 C 语言程序实现链表和二叉树的方法,就必须先了解 何谓“结构体”。所谓结构体,就是把若干个数据项汇集到一处并赋予 其名字后所形成的一个整体。

例如,可以把学生的语文、数学、英语 的考试成绩汇集起来,做成一个叫作 TestResult 的结构体。

在 struct 这个关键词后面接上结构体的名字,然后在名字后面接上用“{”和“}”括起 来的程序块,并在程序块中列出若干个数据项。

 一旦定义完结构体,就可以把结构体当作是一种数据类型用它来定义变量

如果把结构体 TestResult 用作数据类型并定义出了一个名 为 xiaoming 的变量(代表小明的成绩),那么在内存上就相应地分配出了一块空间,这块空间由用于存储 Chinese、Math、English 这三个成员 (Member)数据所需的空间汇集而来。被汇集到结构体中的每个数据项都被称作“结构体的成员”。

在为结构体的成员赋值或是读取成员的值时,可以使用形如 xiaoming.Chinese(表示小明的语文成绩)的表达式, 即以“.”分割变量和结构体的成员

如果要编写一个用于处理 100 名学生考试成绩的程序,就需要定 义一个以 TestResult 为数据类型、包含 100 个元素的数组。通过定义, 在内存上就分配出了一块空间,能够存储 100 个数据的集合,每个数据的集合中都含有 Chinese、Math、English 三个数据项。接下来只要巧妙地运用结构体的数组就可以实现链表和二叉树了。

3.了解链表和二叉树的实现方法:

下面讲解如何使用结构体的数组实现链表。链表是一种类似数组 的数据结构,这个“数组”中的每个元素和另一个元素都好像是手拉着 手一样。在现有的以结构体 TestResult 为数据类型的数组 Student[100] 中,为了让各个元素“把手拉起来”,就需要在结构体中再添加一个成员

 这里的成员 Ptr 存储了数组中另一个元素的地址。在 C 语言中,把存储着地址的变 量称为“指针”。这里的“*”(星号)就是指针的标志。诸位可以看到, Ptr 就是以结构体 TestResult 的指针(struct TestResult*)为数据类型的 成员。这种特殊的结构体可以称为“自我引用的结构体”。之所以叫这 个名字,是因为在结构体 TestResult 的成员中,含有以 TestResult 的指 针为数据类型的成员,这就相当于 TestResult 引用了与自身相同的数据 类型。

在结构体 TestResult(已变成了自我引用的结构体)的数组中,每 个元素都含有一个学生的语文、数学、英语成绩以及成员 Ptr。Ptr 中存 储着本元素接下来该与哪一个元素相连的信息,即下一个元素的地址。 在链表的初始状态中,会按照元素在内存上的分布情况设定成员 Ptr 的值

在二叉 树的实现中,用的还是自我引用的结构体,只不过要改为要带有两个 连接信息的成员的自我引用结构体

二叉树多用于实现那些用于搜索数据的算法,比如“二分查找法”。 比起只使用链表,使用二叉树能够更快地找到数据。因为搜索数据时 并不是像在简单数组中那样沿一条线搜索,而是寻着二叉树不断生长 出来的两根树杈中的某一枝搜索,这样就能更快地找到目标数据了

因此数组对于算法和数据结构来说很重要,需要大家灵活使用

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

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

相关文章

synchronized不能锁静态变量_面试官:请说一下对象锁和类锁的区别

有锁才有自由生活中不存在绝对的自由,绝对的自由通常对应的无序和混沌,只有在道德、法律、伦理的约束下的相对自由,才能使人感受到自由。而在多线程编程中,锁是至关重要的,锁就是道德,就是法律约束&#xf…

计算机主板开机接线端子,装机必看,机箱前置面板接线向导,不怕再接错线了...

对于新手来说,在自己DIY一台电脑整机的时候,肯定是既兴奋又恐慌。兴奋是自己总算能亲自动手,组装一台自己称心如意且个性化十足的台式机。让大家感到恐慌的是主板那么多针脚和接口,该从何处下手,对于不懂行不专业的人来…

MyEclipse的自动补全功能:输入@或者.没提示

自动补全功能。一般默认的只有输入 . 的时候来才能自动提示。 配置方法: 1. 打开MyEclipse,然后“window”→“Preferences” 2. 选择“java”,源展开,“Editor”,选择“Content Assist”。 3. 选择“Content Assist”…

2019计算机开机号003期,2019年011期福彩中心开机号(附汇总)

001期开机号:819——试机号:985—— 开奖号:644→总结:开机号无下试机号无下002期开机号:579——试机号:227—— 开奖号:272→总结:开机号下7试机号下27003期开机号:049——试机号:831—— 开奖…

atoi函数_每日干货丨C语言中的字符串处理库函数介绍与实现

strlen函数:求字符串的长度size_t strlen(const char *s)头文件:#include说明:求出s指向的字符串的长度(不包括null字符)。返回值:返回s指向的字符串的长度。size_t strlen(const char *s){size_t len 0;while(*s) len;return len;}strcpy和strncpy函数&…

解决安卓项目显示cannot resolve symbol 'R'

今天打开Android studio的时候发现 R标红,将鼠标悬放上去,显示cannot resolve symbol R 卧槽这是咋回事,什么都没干呀 快速解决方法 alt enter 导包 等待一会儿Gradle的加载 完美解决!!! 另外 鼠标移…

从windows计算机中卸载office,如何彻底卸载电脑中的Office组件|Office办公软件卸载不干净怎么办...

‍有不少用户遇到原本在电脑中的软件卸载不干净,而无法重新安装软件的问题。比如说有位用户在安装Office办公软件时就是因为没有彻底卸载原先电脑中的软件才导致无法安装。接下来系统城小编就和大家分享一下彻底卸载电脑中的Office组件的方法。1、打开电脑自带的控制…

python调用函数怎么表示_Python---7函数(调用定义函数)

函数 Python内置了很多有用的函数,我们可以直接调用。 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs(),只有一个参数。可以直接从Python的官方网站查看文档:也可以在交互式命…

解决Android studio 的Glide 4.1.0第三方jar包如何导入libs目录

很多人在让自己的安卓实现导入外部的图片资源的时候遇到一系列的问题,今天就来好好解决 首先,相去github的官网下载这个jar包,下载任意一个即可,注意:你的网络可能会被墙,你可以换成手机的热点去下载&#…

没有显示屏怎么启动服务器,中关村xp系统提示“没有启动服务器服务”如何解决...

通常情况下,windowsxp系统电脑发生故障都会弹出警告提示,然后用户就可以利用这些信息判断出错来源从而解决问题。比如,一位中关村XP系统用户反馈自己的电脑发生故障,弹出警告提示:没有启动服务器服务。这该如何处理呢&…

python如何改变入参的值_从事数据分析3年后,发现用python入门数据分析这三本书必看!...

做数据分析为什么选择python?为什么选择python来做数据分析?先来看一下用python做数据分析有什么优势1、python在数据分析方面有非常专业的模块,很多常用功能,在做数据分析时非常方便。2、python相比于其他计算机编程,…

Android studio使用手册说明

Android studio project约是eclipse workspace Android studio module是eclipse project 首先,从eclipse到Android studio是一个必然的过程了,Android studio集成了eclipseADT插件开发安卓APK,所有人都是希望越方便越好,不会去自…

python可变参数和关键字参数位置_python 参数笔记 -- 位置参数 关键字参数 命名参数 形式参数 默认参数 可变参数 可选参数 位置顺序...

这么多名称,python到底有几种参数: 2种:普通参数(即位置参数,靠位置先后来指定参数),关键字参数(即命名参数,靠名字来指定参数)。 常说的可变参数也就是普参的…

Android studio的设置界面介绍

1.编译按钮 2.运行选择按钮 3.运行按钮 4.设置界面 5.设置页面布局 6.系统保存设置 7.密码设置 8.下载按钮: 9.数据传递: 11.改色: 12.自定义完成指定代码的检查 13.Notifications 14.宏设置 15.SDK管理,可以直接导入自己的SDK&am…

打印机显示rpc服务器,win10打印机出现RPC服务器不可用的处理办法

win10打印机出现RPC服务器不可用的处理办法?大家在使用打印机打印的时候,多多少少都会碰到一些这样那样的故障。这不就有win10系统的网友,在使用打印机打印的时候,提示:RPC服务器不可用。出现这样的故障,大…

Android Studio的快捷键图文并茂

首先在设置界面可以看到很多快捷键,并支持将之前软件的快捷键习惯导入安卓开发中,默认的就是安卓开发的快捷键,所以基本不需要一些学习成本 双击shirf可以跳出查找界面 修改快捷键 按住ctrlshirftalt并用鼠标单击要添加代码的位置。就可以实现…

龙族幻想服务器维修到几点,【龙族幻想】4月1日维护公告

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼亲爱的玩家:我们计划在4月1日凌晨3:00-8:00进行一次版本更新。建议您提前准备,及时下线以免造成不必要损失。新服公告:我们将于2021年4月3日11点开放2组全新服务器!具体服务器名如下&…

python中str和input_python中input()与raw_input()的区别分析

使用input和raw_input都可以读取控制台的输入,但是input和raw_input在处理数字时是有区别的 纯数字输入 当输入为纯数字时 input返回的是数值类型,如int,float raw_inpout返回的是字符串类型,string类型 输入字符串为表达式 input会计算在字符…

解决Android studio 加载不出网络图片的步骤

第一:网络问题,好像连家里的wifi没有手机的wifi能下载那个github的压缩包, 第二:版本问题,我把导入的包降低版本了,系统匹配成功, 第三:布局的时候需要把宽度高度的比例和加载的网…

list ajax封装,util-pagelist_基于layui封装的ajax分页列表

/*** layui分页列表模板引擎(使用时请使用new Pagelist(), 将每个分页模板当成一个独立的实例)* param tplid 模板id* param viewid 渲染模板容器的id* param pageid 分页容器id* param httpurl 请求接口的url* param param 请求接口的参数* param method 接口请求方式(get、po…