CPP学习之——动态链表的显示(15.7)

一 概述

上几节课介绍了动态链表的创建,接下来我们要将我们所有建立的链表显示在屏幕上

二 分析

  • 由于在建立链表是我们的create函数返回一个head头节点的内存地址,在这里我们就将head作为指针来访问各节点的数据并输出数据
  • 我们可以在create函数的下面定义一个用来显示链表的函数showbook,这个函数有一个参数,这个参数是指向book类的指针,这个指针我们把它命名为head,以表示它是一个头指针,由于该函数的作用仅仅是输出各个结点的信息,所以这个函数时没有返回值的
  • 循环的条件是head指针不为空,也就是说head这个头指针它是存在的,不存在的话,那么head这个指针就为空,head指针为空的话,表示没有头节点。没有头节点自然就不用输出链表的信息,所以while循环的条件是头指针不为空

三 示例代码及结果输出

3.1 代码

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include<iostream>
#include<cstring>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
class book
{
public:
int num;
float price;
book *next;
};
book *head = NULL;
bool check(string str)
{
for (int i = 0; i < str.length(); i++)
{
if ((str[i] > '9' || str[i] < '0') && (str[i] != '.'))
return false;
}
return true;
}
book* create()
{
book *p1, *p2;
p1 = new book;
head = p1;
p2 = p1;
cout << "请输入图书的编号,以0结束" << endl;
string str;
cin >> str;
while (!check(str))
{
cout << "输入的不是数字,请重新输入,按0返回" << endl;
cin >> str;
}
p1->num = atoi(str.c_str());
//cin>>p1->num;
if (p1->num != 0)
{
cout << "请输入图书的价格" << endl;
cin >> str;
while (!check(str))
{
cout << "输入的不是数字,请重新输入,按0返回" << endl;
cin >> str;
}
p1->price = atof(str.c_str());
//cin>>p1->price;
} else {
delete p1;
p2 = NULL;
p2->next = NULL;
head = NULL;
return head;
}
while (p1->num != 0)
{
p2 = p1;
p1=new book;
cout << "请输入图书的编号,以0结束" << endl;
cin >> str;
while (!check(str))
{
cout << "输入的不是数字,请重新输入,按0返回" << endl;
cin >> str;
}
p1->num = atoi(str.c_str());
//cin >> p1->num;
if (p1->num != 0) {
cout << "请输入图书的价格" << endl;
cin >> str;
while (!check(str))
{
cout << "输入的不是数字,请重新输入,按0返回" << endl;
cin >> str;
}
p1->price = atof(str.c_str());
//cin >> p1->price;
}
p2->next = p1;
}
delete p1;
p2->next = NULL;
return head;
}
void showbook(book *head)
{
cout<<endl;
cout<<"图书信息如下:"<<endl;
while(head)
{
cout<<"图书编号:"<<head->num<<"\t"<<"图书价格:"<<head->price<<endl;
head=head->next;
}
}
int main() {
book *head=NULL;
head=create();
showbook(head);
return 0;
}

3.2 输出结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
请输入图书的编号,以0结束
1
请输入图书的价格
11
请输入图书的编号,以0结束
2
请输入图书的价格
22
请输入图书的编号,以0结束
0

图书信息如下:
图书编号:1 图书价格:11
图书编号:2 图书价格:22