数组、指针、引用、与链表

来源:互联网 发布:linux 密码修改 编辑:程序博客网 时间:2024/05/24 05:40

变量,也就是我们所熟知的数据结构,这里总结一下各种变量及其用法。

数组

数组作为最简单的数据结构,这里我们以三位数组为例,记录研究院新生的院系,专业,以及导师。

int student[6][12][10];char name[30];int school,major,supervisor;

数组的数据存储从 A[0] 到 A[n-1],其大小 (存储空间) 是固定的,所以在构建数组时,需要知道最多需要多少个存储空间。注意在创建了该个数组后,即使数据并不需要用尽所有的空间大小,但其在电脑中的存储大小是不变的。因此在运用数组时,在了解需要多少存储空间前提下,也希望尽可能最小化存储空间。这是数组的一个缺点。而其另一个缺点是在前面n-1为元素中插入一个新元素或者删除一个元素比较麻烦,因为需要将其后面的元素向后或者向前移动。数组的优点是可能快速地锁定,存储,或者找回数据。

指针

变量有三要素,名字、值、和地址,地址也就是指向该变量的指针。因此指针也可以是一个变量,而这个专门存放地址的变量我们称之为指针变量pointer。现在假设建立一个苹果的价格存储在电脑内,我们用pointer来存放指针

int applePrice=5; int* pointer=&applePrice;//建立一个指针变量指向变量地址*pointer;//pointer输出的是地址,*pointer输出变量的值*pointer=6;//苹果价格上升到6,可以利用指针进行修改变量值

引用

引用相当于给某个变量另外起一个名字。假设一个老板管理南北两家水果店,两家店都有出售苹果且价格相同,我们将两家店内的苹果区分为NorthApple和SouthApple,为了避免因价格变动多次重复修改价格,我们使用引用,无论我们修改哪家水果店的苹果价格,另外一家店的水果价格也会自动改变。

int NorthApple=5;int& SouthApple=NorthApple;//定义了两家店的苹果价格引用//注意倘若NorthApple是常量const int或者const int&,是无法引用给SouthApple的,除非进行强制类型转换。

链表

链表不同于数组内嵌元素的形式,其是由 links 和 lists 2部分组成的。lists存储元素,links是下一个位置的指向。相比起数组新增加元素或删除原有元素的繁琐,链表的一个优点是能够快速地新增加元素或删除原有元素。由此我们可知链表的另一个优点是并不需要固定的大小。但因为难以定位的缘故,当数据量大时,在链表上搜索元素是非常费时的,我们需要从head开始寻找,也因此,链表在一些搜索算法中无法使用,不如说Binary Search。

int* pointer1=new int(66);//动态创建1个链,值为6int* pointer2=new int[6];//动态创建6个链delete pointer1; delete[] pointer 2;//删除上述创建的链

浅谈动态内存

在C++中,new运算符被用来创建动态内存,delete用来释放内存。

int* pointer1;pointer1=new int;//空间大小为sizeof(int)*pointer=6;delete pointer1;//数组int[60]内存空间int* pointer2=new int[60];//空间大小为 60 x sizeof(int)pointer2[0]=01;//给pointer2[0]赋值为01delete[] pointer2;

浅谈结构体

结构体经常被用于捆绑一个事物及其相关联的属性,比如一个员工有员工号、姓名、性别、工资等。结构体并不是函数,而是如同int、double、float、char等的变量的类型。

#include <iostream>using namespace std;struct employee{int id;char name[6];char sex; int salary;};employee xiaoming{001,{'小明'},{'M'},6000};//创建员工小明employee* pointer=&xiaoming;//建立指向小明的指针(*pointer).id;pointer->id;//都可以访问小明的工号值
原创粉丝点击