静态链表
const int NULL=0;
#include <iostream>
using namespace std;
class book
{
public:
int num;
float price;
book*next;
};
void main()
{
book x,y,z,*head,*p;
x.num=5;
x.price=22.5f;
y.num=6;
y.price=33.6f;
z.num=7;
z.price=44.7f;
head=&x;
x.next=&y;
y.next=&z;
z.next=NULL;
p=head;
while(p!=NULL)
{
cout<<p->num<<endl<<p->price<<endl;
p=p->next;
}
system("pause");
}
动态链表
const int NULL=0;
#include <iostream>
using namespace std;
class book
{
public:
int num;
float price;
book*next;
};
book *head=NULL;
book *creat()
{
//p1作为下一个节点的指针,p2作为下个节点的指针
book *p1,*p2;
p1=new book;
head=p1;
p2=p1;
cout<<"请输入图书的编号,以0结束"<<endl;
cin>>p1->num;
if(p1->num!=0)
{
cout<<"请输入图书价格"<<endl;
cin>>p1->price;
}
else
{
delete p1;p2=NULL;head=NULL;return head;
}
while(p1->num!=0)
{
p2=p1; //p2保存的是当p1的指针,
p1=new book; //p1保存的是新开辟的空间
cout<<"请输入图书的编号,以0结束"<<endl;
cin>>p1->num;
if(p1->num!=0)
{
cout<<"请输入图书价格"<<endl;
cin>>p1->price;
}
p2->next=p1; //由于p保存的是p1的原来的指针,就等于旧的p1->next保存新的p1。
}
delete p1; //最好一个保存的是0,所以删除掉
p2->next=NULL; //最新的p1也就是链中最后变的p1的next成员指针保存的值为空
return head; //由于head指针和p2都是保存的p1最开始的指针,所以p2的作用是不断的给旧的p1保存新的p1,head的作用是利用最旧的p1查找p1保存的链式数据。
}
void main()
{
creat();
}
插入图书的几种插法
尾插法
void insert(book*head,int num,int price)
{
book*list=new book; //创建一个新节点由list指针指向新节点
book*l; //用来保存访问过的节点的地址
while(head) //判断是否存在头节点
{
i=head;
head=head->next; //最后l保存的是最好一个节点
}
l->next=list; //list节点成为了最后一个节点然后把编号和价格赋给list指针
list->num=num;
list->price=price;
list->next=NULL
}
前插法
void insert(book*head,int num,int price)
{
book*list=new book;
list->num=num;
list->price=price;
list->next=head; //list成了头节点
::head=list; //把list赋给全局头节点
}
中间插法
void insert(book*head,int num,int price)
{
book*list=new book;
list->num=num;
list->price=price;
if (num<=head->num) //判断新插入的节点的编号是否小于等于头节点的编号
{
list->next=head; //小于则插在头节点前面
::head=list;
return; //新节点成为了头节点要退出insert函数
}
book*temp=NULL;
while((num>head->num)&&(head->next!=NULL))
{
temp=head;
head=head->next; //head指向最后一个节点
}
if (num>head->num) //判断新节点编号是否大于head的尾节点编号
{
head->next=list;list.next=NULL; //符合条件实行尾插
}
else
{
temp->next=list; //temp保存了前一个节点的地址,head保存的下一个节点的地址
//前一个节点就接上了list,然后list保存head节点,这样list就在中间插入了
list->next=head;
}
}