十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
struct list *createlist(int data[], int n)
公司主营业务:成都做网站、成都网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出达坂城免费做网站回馈大家。
{
//输入一个数组,n是数组的大小,返回一个内容相同的链表
struct list *head = 0, *p, *q;//head:链表头
int i;
head = (struct list *) malloc(sizeof(struct list));//建立链表头,分配空间
head-data = data[0];//往链表头填入数据data[0]
p = q = head;//这些是循环变量,p先走,q跟着,俩人从链表头一直走到链表尾
//每次循环,p和q一开始指向链表末尾的节点上。 p先走,malloc函数改变了他的值,他指向了一块新的内存空间,就是新的节点;然后q-next=p把新连起来;然后 q跟上p的步伐,q=p,相当于二者又站在了末尾的节点上。
for(i=1; in; i++)
{
p = (struct list *) malloc(sizeof(struct list));//p变成一个新的节点,给p分配空间(注意p的值被改写了,它不再是head,而是一个新的值,就是下一个节点)
p-data = data[i];//p装入数据,第一次循环它装入的是data[1],也就是紧跟着head的那个
q-next = p;//第一次循环q是head,以后每次都是q落后p一个格子。
//第一次循环相当于head-next=p,把第1个节点放在第0个节点后面。
q = p;
//第一次循环q=p,q追上p的脚步,离开head(第0
//第二次循环q=p,p又变成新的节点,相当于把第2个节点(p)放在第一个节点后面
}
p-next = NULL;//封锁野指针
return head;
}
不懂欢迎追问
你说的如果是自定义函数。就先写出来,比如
#include
void create()
{
//这里写函数代码
}
int main()
{
create();//在主函数里进行调用
}
1、createlist不是库函数,一般是数据结构中实现新建一个链表的自定义函数。因此没有什么用法好说的,关键是看自己怎么定义。
2、例程:
NODE *creatlist(int a[])
{ NODE *h,*p,*q;int i;
h=(NODE *)malloc(sizeof(NODE));
h-next=NULL;
for(i=0;iN;i++)
{q=(NODE *)malloc(sizeof(NODE));
q-data=a[i];
q-next=NULL;
if(h-next==NULL) h-next=p=q;
else {p-next=q;p=q;} }
return h;
}