重新学习编程语言日记,2011年12月29日 09:17分
//定义一个结构体
struct LINK{
int age;
struct LINK *NEXT;
}head,p1,p2;
首先定义了一个结构体,结构体包括指针域,数据域。这个结构体就是你链表里面的节点。每个节点都包括了数据域,指针域。
指针域指向下一个节点的地址。
有了这么一个结构体。肯定就需要初始化这个结构体了。写个函数来初始化链表
int count = 0; //记录节点个数
struct LINK *LinkListINIT()
{
p2=p1=(struct LINK*)malloc(struct LINK);
//这样为一个节点分配一个内存空间。内存空间大小是struct LINK 所占用存储空间的大小。
//p2和p1同时指向这个空间。以后将p2都指向旧的那个节点,p1指向新建的节点
scanf("%d",&p1->age);
//为第一个节点的age赋值
while(p1->age!=0)
{ //当输入的是0,就结束
count+=1; //既然能进入循环,就肯定输入了非0值,就有一个节点了。
if(count ==1)
head = p1; //如果这个是第一个节点,就把head指向第一个,head就是链表的头了,要查找就从head开始
else
p2->NEXT = p1; //如果不是第一个节点了,p2->NEXT就指向新的节点
p2 = p1; //然后p2指向新的节点
p1=(struct LINK*)malloc(struct LINK);
// 然后为下一个节点再开辟一个新空间
scannf("%d",p1->age); //为新的节点赋值
}
free(p1); //由于是先开辟空间,再赋值,如果输入是0中断循环,也应该先把新建,而没用上的内存空间释放
p2->NEXT = NULL //以免成为野指针,赋值为NULL
return head ; //返回链表的首地址
}
int main(void)
{
struct LINK *head;
head=LinkListINIT();
rerurn 0;
}