栈的算法:

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

主要的典型数据结构

数据结构与算法基本

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

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

栈的大小可以根据程序的需求任意指定。假设最多 也就有 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 的值

数据结构与算法基本

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

数据结构与算法基本

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

数据结构与算法基本

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

相关文章:

  • 2021-08-31
  • 2021-08-20
  • 2021-06-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-02
  • 2021-12-15
  • 2021-03-29
猜你喜欢
  • 2021-12-15
  • 2021-12-15
  • 2021-12-19
  • 2021-04-13
  • 2021-09-18
  • 2021-07-10
相关资源
相似解决方案