重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
void creat(struct link *head)
创新互联公司于2013年创立,先为海原等服务建站,海原等地企业,进行企业商务咨询服务。为海原企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
把head[1]全改为head
就一个元素为什么要定义一个数组 凡是后面[1]的都改了
因为如果是L的话,就要把整个这个结构体都传过去,效率不高,而用其指针传递的只是一个地址,效率要高很多,尤其对于大型程序来说。而且creat函数里有*L,这就是指向结构体了,刚好需要传指向结构体 的指针,所以只能取址L,说白了 一个穿的是指针,而一个传的是结构体,效率高下之分一看就知道
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 stdio.h
#include malloc.h
#include string.h
#define N 5
typedef struct node
{
char number[10];
int data;
struct node *next;
}node;
node * create()
{
node *p,*s,*h; char number[10];
int j=1,x;
p=s=h=(node*)malloc(sizeof(node));
h-next=NULL;
printf("please input the data to create the list,end with -1 or %d numbers\n",N);
while(x!=-1j=N)
{
printf("input name:");
scanf("%s",number);
printf("input age:");
scanf("%d",x);
s=(node*)malloc(sizeof(node));
s-data=x;
strcpy(s-number,number);
if(h-next==NULL)
h-next=s;
else
p-next=s;
p=s;
j++;
}
p-next=NULL;
return h;
}
int main()
{
node *p;
p=create() ;
return 0;
}