molloc函数关于链表的学习⼼得
1、对指针的简单理解
(1)指针即地址,也就是说可以把指针看做⼀个地址;
(2)“int *a”可以理解成“int* a”,表明a是⼀个指针,int*是类型,*a表⽰指针a所指向的内存的值。
2、对malloc和free函数的简单理解
malloc函数:
(1)从内存中申请分配指定字节⼤⼩的内存空间,如malloc(4)、malloc(sizeof(int));
(2)malloc函数返回void *类型,它表⽰未确定类型的指针,可以强制转换为其他类型的指针,故有如下:
int *a;
a=(int *)malloc(sizeof(int));
free函数:
(1)和malloc函数配套使⽤,释放动态申请的空间
(2)free(a);//a是指针
3、链表(创建、插⼊、删除、打印等)
详见⽹站 ,解释得很清楚。以下是我的⼀些⼼得。
(1)使⽤malloc函数需要⽤到stdlib.h头⽂件;
(2)建⽴如下形式的结构体,即结构体内部有指向同种结构体的指针:
struct node
{
int data;
……
struct node *next;
}
(3)⼀般需要创建头指针(head)、临时指针(p)和另外⼀个指针(q)。头指针⽤来指向链表的开始,临时指针指向新创建的下⼀个节点,另外⼀个指针⽤来指向当前节点。如以下代码:
struct node
{
int data;
struct node *next;
};
int main()
{
struct node *head,*p,*q;
int i,n,a;
scanf("%d",&n);
head=NULL;
for(i=1;i<=n;i++)
{
scanf("%d",&a);
p=(struct node *)malloc(sizeof(struct node));//(2)
p->data=a;
p->next=NULL;//考虑到最后循环结束的时候,做个收尾⼯作?打印时作为终⽌判断?规定如此?
if(head==NULL)
head=p;
else
q->next=p;//(3)
q=p; //(1)
}
a、在第⼀次循环(也就是在创建第⼀个节点的时候),指针p指向新开辟的空间的⾸地址,并把p指针中的next指针指向空域(否则野指针?);
b、接着if语句仅在第⼀次满⾜⽣效,将head指针指向了p开辟的空间的⾸地址,也就是链表的开始处。此后head指针仅仅作为标志链表的开始。
c、接着把p值赋给q,因为p下⼀个循环将会指向新的创建的节点。注意q也有next指针。
d、进⼊第⼆次循环,p继续开路创建下⼀个节点,到达if判断语句不满⾜后进⼊else语句,q->next=p表⽰上⼀个节点的后续指针指向当前节点(也就是P)。这就好⽐p是⼀个开路先锋,q是后⼤队,q可以利⽤地图(next)跟踪到p的所在。
理解顺序(1)q=p(2)p去开路(3)q的地图(next)指向P所开的路。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论