C语言向函数传递链表 c语言函数调用链表

C语言链表函数,求解析 。答案:
①p0
②p1
③NULL
解析:
p0指向要插入的结点,p1指向要和p0结点的info进行比较的结点,如果找到应该插入的位置,p0会被插入在p1之前,如果没找到,会被插入在p1之后 。
第一个if检查链表是否为空,如果为空,直接将p0变为首结点就完成了插入 。
while循环的作用是寻找插入位置 , 因为链表要求降序 , 所以用p1从首结点开始找 , 要找到第一个info小于等于p0结点的结点 。每次循环结束后,p2将指向p1之前的结点,为后面的插入作准备 。
第二个if检查之前的while循环是否找到这样的结点 。如果没找到,说明前面从while循环出来时p1指向的是尾结点,这时要将p0插入到链表末尾,所以将p0插入到p1之后 。p0的后面没有结点,所以它的link指向NULL,所以第③问填NULL 。如果找到了,那么进入第三个if 。
第三个if检查p1是否刚好为首结点 , 如果为首结点,说明前的while循环根本没进去直接就出来了,这时p1之前没有结点,p2还没有指向任何结点,所以还不能使用p2 。由于要将p0插入到p1之前,所以必须将p0变为首结点,所以第①问填p0 。
如果p1不是首结点,进行的就是常规的插入操作了,将p0插入到p1之前,p2之后,所以第②问填p1 。注意这里不能填p2-link,因为这里不在第三个if的else里面,第三个if出来以后也要经过这一步,而之前说了 , 如果进入了第三个if,p2是不能使用的 。
C语言链表的使用方法下面的程序是单链表的建立与输出,都有详细的注释,相信你能看的懂
但要想学习链表必须得掌握了一定的C语言基础
下面这个链表的作用是建立5个结点的单链表,5个结点的值输入以后,依次输出各个结点的值
#includestdio.h
#includestdlib.h
【C语言向函数传递链表 c语言函数调用链表】//链表的建立与输出
struct node//定义结点的类型
{
int num,score;
node*link;
};
void main()
{
node*creat(int n);//函数原型声明
void print(node*h);//函数原型声明
node*head=0;//定义链头指针并初始化
head=creat(5);//调用creat函数创建链表
print(head);//调用print函数输出链表
}
node*creat(int n)
{
node*h=0,*p,*q;
int i;
for(i=1;i=n;i++)
{
q=(node*)malloc(sizeof(node));//分配一个结点空间
scanf("%d%d",q-num,q-score);//输入新结点的值
q-link=0;//新结点的指针域置0
if(h==0)
h=q;//第一个结点作为链头结点
else
p-link=q;//新结点添加到链表的末尾
p=q;
}
return h;//返回链头指针
}
void print(node*h)//链表输出函数的定义
{
while(h)//当指针h非空时输出h所指结点的值
{
printf("num=%d\tscore=%d\n",h-num,h-score);
h=h-link;//使h指向下一个结点
}
}
C语言 关于链表 函数如何通过参数传递返回一个单向链表只需要把函数返回值定义为链表节点的指针类型即可 。
以下为实例代码 。
#include stdio.h
#include stdlib.h
struct node
{
int v;
struct node *next;
};
struct node * make_head(void)//函数功能,返回一个链表的头节点
{
struct node *ret;
ret = malloc(sizeof(struct node));//申请一个头节点空间,
ret-next = NULL;
return ret;//返回头节点 。
}
调用make_head得到的返回值,就是用来标记一个链表起始的头节点 。
在实际应用中,返回链表的实现方式有很多种,功能也各不相同 , 但原理都是一样的 。

推荐阅读