C++深入浅出探索数据结构的原理

 更新时间:2022年05月25日 09:30:37   作者:Kinght_123  
C++的数据结构很多,很复杂,所以本文将通过示例带大家深入了解一下C++中的数据结构与算法。文中的示例代码讲解详细,感兴趣的可以了解一下

一、前言

因为C++的数据结构很多,很复杂,一篇文章根本讲不到所有的数据结构。即使写出来,看了一遍效果也不好,所以博主打算最近都更新C++的数据结构类型,让读者弄懂C++的数据结构与算法。

二、C++的数据结构

C/C++ 数组允许定义可存储相同类型数据项的变量,但是结构是 C++ 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。

结构用于表示一条记录,假设您想要建立一个游戏中的英雄,您可能需要记录下每个应用的下列属性:

  • life_value:生命值
  • hero_name:英雄名称
  • skill:技能
  • ID:英雄id

三、定义结构

为了定义结构,您必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型。

下面是声明一个结构体类型 Heros,变量为 hero:

例子:

struct Heros
{
   char  life_value[50];
   char  hero_name[50];
   char  skill[100];
   int   ID;
} hero;

四、访问结构成员

为了访问结构的成员,我们使用成员访问运算符(.)。成员访问运算符是结构变量名称和我们要访问的结构成员之间的一个句号。

例子:

#include <iostream>
#include <cstring>

using namespace std;

// 声明一个结构体类型 Heros
struct Heros
{
  char  life_value[50];
  char  hero_name[50];
  char  skill[100];
  int   ID;
} hero;

int main( )
{
  Heros(Hero1);        // 定义结构体类型 Heros 的变量 Hero1
  Heros(Hero2);        // 定义结构体类型 Heros 的变量 Hero2

  // Hero1 详述
  strcpy( Hero1.life_value, "500");
  strcpy( Hero1.hero_name, "武器大师");
  strcpy( Hero1.skill, "反击风暴");
  Hero1.ID = 996;

  // Hero2 详述
  strcpy( Hero2.life_value, "600");
  strcpy( Hero2.hero_name, "德玛西亚皇子");
  strcpy( Hero2.skill, "人在塔在");
  Hero2.ID = 007;

  // 输出 Hero1 信息
  cout << "第一个英雄的生命值为 : " << Hero1.life_value <<endl;
  cout << "第一个英雄的名称为 : " << Hero1.hero_name <<endl;
  cout << "第一个英雄的技能为 : " << Hero1.skill <<endl;
  cout << "第一个英雄的ID为 : " << Hero1.ID <<endl;

  cout << endl;
  // 输出 Heor2 信息
  cout << "第二个英雄的生命值为 : " << Hero2.life_value <<endl;
  cout << "第二个英雄的生命值为 : " << Hero2.hero_name <<endl;
  cout << "第二个英雄的生命值为 : " << Hero2.skill <<endl;
  cout << "第二个英雄的ID为 : " << Hero2.ID <<endl;

  return 0;
}

输出:

第一个英雄的生命值为 : 500
第一个英雄的名称为 : 武器大师
第一个英雄的技能为 : 反击风暴
第一个英雄的ID为 : 996

第二个英雄的生命值为 : 600
第二个英雄的生命值为 : 德玛西亚皇子
第二个英雄的生命值为 : 人在塔在
第二个英雄的ID为 : 7

五、结构作为函数参数

您可以把结构作为函数参数,传参方式与其他类型的变量或指针类似。您可以使用上面实例中的方式来访问结构变量:

#include <iostream>
#include <cstring>

using namespace std;
void printHero(struct Heros hero);


// 声明一个结构体类型 Heros
struct Heros
{
  char  life_value[50];
  char  hero_name[50];
  char  skill[100];
  int   ID;
} hero;

int main( )
{
  Heros(Hero1);        // 定义结构体类型 Heros 的变量 Hero1
  Heros(Hero2);        // 定义结构体类型 Heros 的变量 Hero2

  // Hero1 详述
  strcpy( Hero1.life_value, "500");
  strcpy( Hero1.hero_name, "武器大师");
  strcpy( Hero1.skill, "反击风暴");
  Hero1.ID = 996;

  // Hero2 详述
  strcpy( Hero2.life_value, "600");
  strcpy( Hero2.hero_name, "德玛西亚皇子");
  strcpy( Hero2.skill, "人在塔在");
  Hero2.ID = 007;

  // 输出 Hero1 信息
  printHero(Hero1);

  // 输出 Hero2 信息
  printHero(Hero2);

  return 0;
}
void printHero(struct Heros hero)
{
  cout << "英雄的生命值:" << hero.life_value << endl;
  cout << "英雄的名称:" << hero.hero_name << endl;
  cout << "英雄的技能:" << hero.skill << endl;
  cout << "英雄的ID:" << hero.ID << endl;
}

输出:

英雄的生命值:500
英雄的名称:武器大师
英雄的技能:反击风暴
英雄的ID:996
英雄的生命值:600
英雄的名称:德玛西亚皇子
英雄的技能:人在塔在
英雄的ID:7

六、指向结构的指针

您可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似,如下所示:

struct Books *struct_pointer;

现在,您可以在上述定义的指针变量中存储结构变量的地址。为了查找结构变量的地址,请把 & 运算符放在结构名称的前面,如下所示:

struct_pointer = &Book1;

为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符,如下所示:

struct_pointer->title;

例子:

#include <iostream>
#include <cstring>

using namespace std;
void printHero(struct Heros *hero);


// 声明一个结构体类型 Heros
struct Heros
{
  char  life_value[50];
  char  hero_name[50];
  char  skill[100];
  int   ID;
};

int main( )
{
  Heros(Hero1);        // 定义结构体类型 Heros 的变量 Hero1
  Heros(Hero2);        // 定义结构体类型 Heros 的变量 Hero2

  // Hero1 详述
  strcpy( Hero1.life_value, "500");
  strcpy( Hero1.hero_name, "武器大师");
  strcpy( Hero1.skill, "反击风暴");
  Hero1.ID = 996;

  // Heor2 详述
  strcpy( Hero2.life_value, "600");
  strcpy( Hero2.hero_name, "德玛西亚皇子");
  strcpy( Hero2.skill, "人在塔在");
  Hero2.ID = 007;

  // 通过传 Hero1 的地址来输出 Hero1 信息
  printHero(&Hero1);

  // 通过传 Hero2 的地址来输出 Hero2 信息
  printHero(&Hero2);

  return 0;
}
void printHero(struct Heros *hero)
{
  cout << "英雄的生命值:" << hero->life_value << endl;
  cout << "英雄的名称:" << hero->hero_name << endl;
  cout << "英雄的技能:" << hero->skill << endl;
  cout << "英雄的ID:" << hero->ID << endl;
}

输出:

英雄的生命值:500
英雄的名称:武器大师
英雄的技能:反击风暴
英雄的ID:996
英雄的生命值:600
英雄的名称:德玛西亚皇子
英雄的技能:人在塔在
英雄的ID:7

以上就是C++深入浅出探索数据结构的原理的详细内容,更多关于C++数据结构的资料请关注脚本之家其它相关文章!

相关文章

  • c语言打开文件函数使用方法

    c语言打开文件函数使用方法

    这篇文章主要介绍了c语言打开文件函数使用方法,需要的朋友可以参考下
    2014-02-02
  • 详解C++如何高效利用CPU缓存

    详解C++如何高效利用CPU缓存

    高效利用CPU缓存是编写高性能C++代码的关键之一,所以这篇文章小编主要来和大家介绍一下C++如何实现高效利用CPU缓存,需要的可以参考一下
    2024-02-02
  • QT中删除信号于槽的连接的实现

    QT中删除信号于槽的连接的实现

    本文主要介绍了QT中删除信号于槽的连接的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 关于C++中数据16进制输出的方法

    关于C++中数据16进制输出的方法

    本文主要介绍了关于C++中数据16进制输出的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • C语言指针超详细讲解下篇

    C语言指针超详细讲解下篇

    指针提供了对地址操作的一种方法,因此,使用指针可使得 C 语言能够更高效地实现对计算机底层硬件的操作。另外,通过指针可以更便捷地操作数组。在一定意义上可以说,指针是 C 语言的精髓
    2022-04-04
  • c语言经典习题之逆序字符串详解

    c语言经典习题之逆序字符串详解

    这篇文章主要为大家介绍了c语言习题之逆序字符串,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • 详解C语言sscanf()函数、vsscanf()函数、vscanf()函数

    详解C语言sscanf()函数、vsscanf()函数、vscanf()函数

    这篇文章主要介绍了详解C语言sscanf()函数、vsscanf()函数、vscanf()函数,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • 基于C语言中野指针的深入解析

    基于C语言中野指针的深入解析

    “野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用
    2013-07-07
  • C++两个cpp文件间如何进行各自函数的调用方式

    C++两个cpp文件间如何进行各自函数的调用方式

    这篇文章主要介绍了C++两个cpp文件间如何进行各自函数的调用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 《C++ primer plus》读书笔记(一)

    《C++ primer plus》读书笔记(一)

    本读书笔记是C++ primer plus(第六版)前3章的学习笔记。非常的浅显易懂,复习C++基础知识的可以瞄瞄。
    2014-10-10

最新评论