11:16:26
#include<iostream.h>
/*链表是数据结构中很重要的一部分,后面的知识差不多都与链表有关,
因此链表的意义在数据结构中就非同小可
*/
/************结点的定义**********
/一个指针结点有两部分组成:数据部分和指针部分,
/数据部分,是用户根据具体需要而定义的,而指针部分是用来链接接结点的,
/本质上指针部分是无用的,因为它白白占用了内存,但为了能使节点连起来,又必须使用节点.
/就是这样。
///*********/
typedef struct node
{
int data; //数据部分
struct node* next; //指针部分,用于指向下一个节点
}*Link_List;//定义一个Link_List指针,因为前面有个*,注意这个有个分号,与定义一个类相似
//********单链表的实现*** 整个链表的核心 **********
Link_List Create_LinkList()//返回链表指针
{
Link_List p,q,head;
p=new node; //动态分配内存空间//而在c语言中是用malloc函数实现的(注意:new
//是操作符,而malloc是函数,两个是截然不同的概念.
cout<<"请输入数字,以空格建分开,以0结束!!/n";
cin>>p->data;
head=p;//保存创造的第一个结点,即是头节点
while(p->data) //如果输入的数字p->data为零,则退出循环
{
q=p;//保存临时创建的结点,以便下面的指针链接:q->next=p;即,
//q结点的指针域指向下一个结点p
//因为下面再创建新节点时p的地址有变化了,所以要保存起来。
/*******/p=new node;///创造新节点///
/*******/cin>>p->data;//为新创造的结点赋值///
q->next=p;//链接指针,即是把刚创造的结点链接上
q->next=NULL;//注意最后一个指针的next一定要赋值NULL,否则一个链表就没有结尾了
return head;// 返回创造的链表的头指针
}
void print(Link_List l)
{
while(l)
{
cout<<l->data<<" ";
l=l->next;//再让l指向下一个节点;
}
cout<<endl;
}
void main()
{
Link_List list=Create_LinkList();//让函数返回的链表头指针赋值给list;
print(list);//打印创建的链表
}