信息学竞赛宝典:数据结构基础
上QQ阅读APP看书,第一时间看更新

1.2 简单静态链表

下面的代码实现的是一个简单静态链表,它由3个存储学生数据(学号、成绩)的节点组成。请考虑:(1)head的作用;(2)p的作用。

 1    // 简单静态链表
 2    #include <bits/stdc++.h>
 3    using namespace std;
 4
 5    struct  student
 6    {
 7      long num;                      //学号
 8      float score;                    //成绩
 9      struct student *next;          //该指针指向student类型的结构体
10    };                               //注意必须有分号
11
12    int main()
13    {
14      struct student a,b,c;
15      a.num=34341;                   //a学生赋值
16      a.score=81.5;
17      b.num=34343;                   //b学生赋值
18      b.score=97;
19      c.num=34344; //c学生赋值
20      c.score=82;
21      struct student *head=&a;       //head指向a的地址
22      a.next=&b;                     //将b的地址赋给a.next,即连接下一结构体元素
23      b.next=&c;
24      c.next=NULL;                   //最后一个元素指向空地址
25      struct student *p=head;        //定义指针变量p指向head
26      do                             //输出记录
27      {
28        cout<<p->num<<" "<<p->score<<endl;
29        p=p->next;                   //p指向下一节点
30      } while(p!=NULL);
31      return 0;
32    }

head是“头指针”变量,指向链表中的第一个节点地址,这相当于“幼儿园教师”拉着第一个“小朋友”的手。输出链表中每个节点的值相当于登记小朋友的名字,但是这件事教师是不适合亲自做的,因为她必须时刻拉着小朋友的手,否则小朋友就有可能会跑得找不到人影(链表地址丢失)。p是教师的“助手”,所以由p从教师的位置开始向后一步步移动以登记小朋友的名字。