一 概述
上几节课介绍了动态链表的创建,接下来我们要将我们所有建立的链表显示在屏幕上
二 分析
- 由于在建立链表是我们的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
|