//***** 静态链表 ***** //***** 结构体链表 ***** void test1() { struct book // 定义一个book结构体 { int num; float price; struct book *next; }; struct book x,y,z; struct book *p = NULL; struct book *head = NULL; // 结构体x x.num = 100; x.price = 13.0f; // 结构体y y.num = 101; y.price = 14.0f; // 结构体z z.num = 102; z.price = 15.0f; // 头节点设置为x的地址,尾节点分别设置为y,z,最后z的尾节点设置为NULL,最后尾节点为空,这样才能让编译器知道已经到达链表结尾 head = &x; x.next = &y; y.next = &z; z.next = NULL; p = head; // 循环输出结构体链表 while(p != NULL) { std::cout << "num:" << p->num << std::endl; std::cout << "price:" << p->price << std::endl; p = p->next; } /* 结构体链表比较浅显易懂,理解了结构体链表之后,再学习类的链表就不那么抽象和晦涩了 */ } //***** 类链表 ***** void test2() { class book // 定义一个book类 { public: int num; float price; book *next; }; book x,y,z; book *p = NULL; book *head = NULL; // 结构体x x.num = 100; x.price = 13.0f; // 结构体y y.num = 101; y.price = 14.0f; // 结构体z z.num = 102; z.price = 15.0f; // 头节点设置为x的地址,尾节点分别设置为y,z,最后z的尾节点设置为NULL,最后尾节点为空,这样才能让编译器知道已经到达链表结尾 head = &x; x.next = &y; y.next = &z; z.next = NULL; p = head; // 循环输出类链表 while(p != NULL) { std::cout << "num:" << p->num << std::endl; std::cout << "price:" << p->price << std::endl; p = p->next; } /* 先看看结构体链表,再看看类类链表,就比较容易理解了 像这样的链表实际上是静态链表,链表中所有的节点的数据在编译时就已经确定好了,不会在运行时再进行动态地分配空间,比如创建、添加和删除等操作 这样的链表叫"静态链表" */ }