|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 飞鸽 于 2013-4-3 20:58 编辑
要是你看了,请继续看一下去 ,否则你别看了,如果你觉得有不对或者需要改进的地方请指出,我将接受各位的宝贵建议,学习就是交流的过程,无论怎样分享是一种快乐,如果你收获了,也跟我分享一下请赞一个,你们的肯定是我学习前进的动力。
不够专业解释的地方多多见谅 #include <stdio.h>
#include <stdlib.h>
struct Node //结构体
{
int data;
Node *next; //下一个结构体的结点
};
Node *CreateLink() //创建链表
{
Node *h,*p,*q;
//定义指向Node的h,p,q指针变量,h代表头指针
//p代表永远指向尾结点的指针,q代表新结点
int num;
h=p=q=(Node *)malloc(sizeof(Node));
//起初h,q,p,都指向一个头指针,但头指针为空,什么都没有的结点
printf("请输入数据\n");
scanf("%d",&num);
while(num>0) //输入数据不为0时就作为结点
{
q=(Node *)malloc(sizeof(Node));//再申请一个新结点空间
q->data=num; //把数据存入结点
p->next=q; //这时p指向了新结点q,说白了就是链接结点
p=q; //这一步表示p要后移到下个结点,因为链接完结点,就有可能出现新结点, //p也就后移为指向新结点作准备
printf("请输入数据\n");//继续输入数据
scanf("%d",&num);
}
p->next=NULL;//相当关键,别忘了这一步,因为你的num不大于0时就不执行while的步骤了
//不执行while了意味着没有新的结点q,p也就成了最后一个结点,p要是没有后一个结点,那么
//输出链表的时候计算机就会出错误(编译时不会报错),所以就得有个指向空的结点作为链表结束标志
return h; //把结点都链接完了,就要把头抓住,因为链接了结点,就无须知道其中的结点了,只要把头指针告诉
//主函数就可以了,创建完的链表要怎么处理,主函数会有不同的命令
}
void PrintfLink(Node *h) //输出链表,别忘了把链表的头告诉给函数
{
Node *point; //把头抓住了,还得定义一个指向Node的指针变量point作为输出每一个结点
point=h->next; //头指针有数值吗?没有,所以得把头结点的下一个结点告诉给point
while(point!=NULL) //point不为空就输出咯
{
printf("%-3d",point->data);
point=point->next;//输出了point->data那么要输出下个结点的data就得把point后移是吧这样才能保证
//结点都输出
}
printf("\n");
}
void main()
{
Node *head; //定义一个指向Node的指针作为下面操作后返回的新的链表的头指针
head=CreateLink(); //把创建链表后的头告诉给head
PrintfLink(head); //调用输出链表函数,别忘了形参是头指针
}
|
|