C++ 单向链表
1 #include <iostream>
2
3 using namespace std;
4
5 //目的:创建一个链表,存储学生的信息(姓名和学号)
6 //所以其节点数据为:姓名和学号
7 //用结构体数据类型表示数据
8 typedef struct node
9 {
10 char name[10];
11 int number;
12 struct node *next; //指针域
13 }Student; //为便于书写,将struct node数据类型定义为Student数据类型
14
15 //创建链表,访问列表时需要头节点的地址,所以需要一个返回值,返回头节点的地址,====这个“*”,好好理解一下
16 Student * creatLB(int n)
17 {
18 Student *head = new Student;//创建头节点,头节点一般不含数据
19 Student *pre = head; //创建指针变量pre,用于指存储“上一个”节点地址
20 for (int i = 0; i < n; i++)
21 {
22 cout << "请输入第" << i + 1 << "个学生的姓名和学号" << endl;
23 Student *p = new Student; //动态申请Student数据类型的内存
24 cin >> p-> name;
25 cin >> p-> number;
26
27 pre->next = p; //将上一个节点指针 指向 当前的节点地址
28 pre = p; //将当前节点的地址 给 pre指针,用于准备指向下一个节点地址
29 p->next = NULL;
30 }
31 return head;
32 }
33
34 //创建display函数,用于访问链表并显示
35 void display(Student *head, int n) //要访问链表,需要知道头节点的地址,然后依次访问,所以参数为头节点
36 {
37 Student *p = head->next; //head头节点无数据,将第一个节点的地址给p
38 for (int i = 0; i < n; i++)
39 {
40 cout << "第" << i + 1 << "个学生的姓名是" << p->name << '\t' <<
41 "第" << i + 1 << "个学生的学号是" << p->number << endl;
42 p = p->next; //第一遍循环之后,将下一个节点的地址给p,输出下一个节点的数据
43 }
44 }
45
46 int main()
47 {
48 int n = 3; //存放三个学生的信息
49 Student * addr = creatLB(n); //创建链表,并返回头节点地址,用变量名addr来存储
50 display(addr, n); //传入参数:头节点地址,用于访问链表并显示
51 int t;
52 cin >> t;
53 return 0;
54 }