C++创建动态链表并显示
#include <IOSTREAM>
using namespace std;
class book//定义书籍类
{
public:
int num;//书籍编号
float price;//书籍价格
book*next;//指向书籍类的指针
};
book *head=NULL;//头结点指针,初始化为空
/*******************************
函数声明区
*******************************/
book *creat_dynamic_link();
void show_book(book *head);
/*******************************
函数功能:主函数
输入参数:无
返回参数:0
*******************************/
int main()
{
head=creat_dynamic_link();
show_book(head);
return 0;
}
/*******************************
函数功能:创建动态链表
输入参数:无
返回参数:头结点指针(book类)
*******************************/
book *creat_dynamic_link()
{
book *p1,*p2;//声明book类指针,p1用来存储当前节点的指针,p2用来存储前一个节点的指针
p1=new book;//由p1指针指向在堆中开辟内存空间
head=p1;//将初始p1值赋给head节点指针,作为链表指针的头结点起始位置
p2=p1;//将当前指针值赋给p2,以此存储当前指针值,后面对p1会重新开辟空间,添加新的节点
cout<<"please input the book's number\n";//输入书籍的编号,以0为结束标志
cin>>p1->num;
if(p1->num!=0)//如果输入的编号不为0,有效值
{
cout<<"please input the book's price\n";//输入当前编号书籍的价格
cin>>p1->price;
}
else//如果输入的书籍编号为0,无效值
{
delete p1;//在C++中:释放在堆中开辟的内存空间
p2=NULL;//p2指针初始化为空
p2->next=NULL;//p2的book型指针next赋值为空
head=NULL;//头结点指针赋值为空
return head;//返回头结点指针值
}
while (p1->num!=0)//一旦输入有效的书籍编号数据,应继续开辟空间进行下一节点数据的存储,构建动态链表
{
p2=p1;//将当前节点存储
p1=new book;//重新开辟堆中内存存储下一节点
cout<<"please input the book's number\n";
cin>>p1->num;
if(p1->num!=0)
{
cout<<"please input the book's price\n";
cin>>p1->price;
}
p2->next=p1;
}//跳出循环,录入和存储完毕,释放内存
delete p1;//删除节点,释放内存
p2->next=NULL;//到结尾,无下一节点,赋值为空
return head;//返回头结点
}
/*******************************
函数功能:显示创建的动态链表
输入参数:头结点指针(book类)
返回参数:空
*******************************/
void show_book(book *head)
{
cout<<endl<<"the information of the book next:\n";
while (head!=NULL)
{
cout<<"the book's number: "<<head->num<<"\t";
cout<<"Its price is: "<<head->price<<endl;
head=head->next;
}
}
【参考】范磊老师:从新手到高手视频教程,教程链接:http://www.enet.com.cn/eschool/video/c++/
调试结果:

浙公网安备 33010602011771号