数据结构与算法基本

栈的算法:

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

主要的典型数据结构

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

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

栈的大小可以根据程序的需求任意指定。假设最多 也就有 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一台电脑整机的时候,肯定是既兴奋又恐慌。兴奋是自己总算能亲自动手,组装一台自己称心如意且个性化十足的台式机。让大家感到恐慌的是主板那么多针脚和接口,该从何处下手,对于不懂行不专业的人来…

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函数&…

从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,所有人都是希望越方便越好,不会去自…

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并用鼠标单击要添加代码的位置。就可以实现…

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的压缩包, 第二:版本问题,我把导入的包降低版本了,系统匹配成功, 第三:布局的时候需要把宽度高度的比例和加载的网…

现代操作系统初理解

1.现代操作系统是由中断驱动的:如果没有进程要执行,没有I/O 设备要服务,也没有用户请求要响应,操作系统将会静静地等待某件事件的发生。 2.操作系统和用户共享了计算机系统的硬件和软件:既然是共享了,就可…

python没有菜单栏_解决Jupyter Notebook开始菜单栏Anaconda下消失的问题

出现的问题状况是:在Anaconda文件下,少了Jupyter Notebook快捷键,不然每次都要打开Anaconda Navigator再打开Jupyter Noterbook,有点麻烦。为了避免将Anaconda软件卸载重装才出现Jupyter Notebook,就去寻找解决办法。首…

小米机顶盒显示网络无法连接服务器,小米盒子无线网络连接不上怎么回事 - 卡饭网...

无线网络连接不上怎么回事,如何解决无线网络连接不上怎么回事,如何解决 无线网络连接不上怎么回事,如何解决,很多电脑用户可能会遇到这个问题。 一:先检查下你的无线网络开关是否打开,没打开请打开 二:检查你的无线网络…

联想服务器忘记系统登录密码,联想路由器登陆密码忘记了怎么办

路由器是互联网系统中的重要组成部分,是连接因特网中局域网和广域网的设备,它可以根据信道实际的情况选择最合适的路径,那么你知道联想路由器登陆密码忘记了怎么办吗?下面是学习啦小编整理的一些关于联想路由器登陆密码忘记了的相关资料&…

编写五子棋的完整python代码_python实现五子棋游戏

本文实例为大家分享了python实现五子棋游戏的具体代码,供大家参考,具体内容如下 话不多说,直接上代码: 全部工程文件,在GitHub:五子棋 效果预览:#!/usr/bin/env python3 #-*- coding:utf-8 -*- …

服务器网站显示多协议,解决高防IIS8服务器https协议多个同时访问的解决方法

iis提示:至少一个其他网站正在使用同一个https绑定,而次绑定用另一个证书配置。确实要重用https绑定并将其他网站重新指定为使用新证书吗?网友解释:SNI指是一项用于改善SSL/TLS的技术,在SSLv3/TLSv1中被启用。它允许客户端在发起S…