CPP学习之——链表和结构体连接(15.1-2)

一 概述

本节课主要介绍链表和结构体链表的相关概念

二 链表

  • 数组就像容器,它的大小是不可调节的,这一点很令人头疼,因为假如你没了一个很大的容易,却用来盛比较少的东西的话,你会感到很浪费,但是如果你换成小容器的话,它又放不下许多东西。
  • 链表的出现无形中解决了这个问题,它将一个容器分解成若干个小容器,每一个小容器放入合适大小的元素,然后根据需要将它们连接起来
  • 这些若干个小容器我们把它叫做结点,通常它们都是按照顺序排列,排列在第一位的那个容器我们叫它头节点,最后一位的叫尾结点。由于它们的外形是那么的相似,所以加入你要找到放置在某个容器中的东西的话,你只有一个办法,那就是从第一个容器开始往后找,因为每个容器里除了放你要放置的东西外,还会放置下一个容器的地址,我们可以根据这个地址依次找到所需的容器
  • 但是这里又有一个问题,那就是这些容器放了一些比较私人的东西,我不想叫人知道,所以把它们都分别放在比较隐蔽的地方,隐蔽的连我都不知道放在哪里去了,不过好在我还留了一个叫head的纸条(该纸条记录的是下一个容器的地址)找到了第二个容器,然后这么依次进行,直到找出我需要的东西为止

三 结构体链表

3.1 概念

我们具体;来操作一下:

  • 为了便于理解,我们用结构体来代替类操作,这里先来说一下结构体,在C++中,结构体与类相同,不同的是结构体的成员默认为公有成员,而类的成员默认为私有成员
  • 既然它们相同,为什么又要两个关键字来做一样的事情呢?这是因为C语言时代的结构体,没有类方法,功能很单一,不能进行数据的封装和成员的继承,因此C++的创始人Bjame Stroustrup创造了高级的结构体,也就是类。
  • 这里我们之所以用结构体来说明链表,这是因为结构体比较浅显易懂,我们了解结构体的链表之后,再看来的链表就不那么抽象和晦涩了

3.2 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<iostream>
using namespace std;
struct book
{
int num;
float price;
struct book *next;
};
int main()
{
book x,y,z,*head,*p;
x.num=10000;
x.price=14.5;
y.num=20000;
y.price=23.4;
z.num=30000;
z.price=45.6;
head=&x;
x.next=&y;
y.next=&z;
z.next=NULL;
p=head;
while(p!=NULL)
{
cout<<p->num<<","<<p->price<<endl;
p=p->next;
}
return 0;
}

3.3 输出结果

1
2
3
10000,14.5
20000,23.4
30000,45.6