189 8069 5689

C语言函数的链表变量,c语言链表的使用

C语言链表函数,求解析。

答案:

贺州ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!

①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语言的函数与全局变量动态链表的问题

这个可能是你在第一次执行操作的时候移动了指针,而用完后没有指向开始的位置。只是可能,没有代码这个是说不清的。一行都没有执行说时不满足执行的条件。“链表的地址就莫名其妙的变化了。一起变化的还有链表里的所有数据!”这个很可以就是你第一次用了指针没有指回该指的地方。

PS:只是猜想。

C语言链表 主函数

1、添加头文件"stdio.h"

2、struct student * creat(void),但是你的main函数中返回接收却是用的int*类型。

3、主函数main应当明确声明为void main()

4、最为严重的是:struct student * creat(void) 函数体中使用了局部变量struct student *head; struct student *p1,*p2; 但是函数结束的地方却要返回这些指针,因此返回的值是无效数据。返回时,已经不再作用域了,是无效的空间。建议把这些数据当作输入参数,指针类型的。就可以正确的接收分配的struct student空间以及指针了。

5、struct student * creat(void) 函数体中,临时指针*p1、*p2再函数返回之前应当设置为NULL,避免因为局部变量的作用域结束导致相关的空间被清除。

总之,我建议把struct student * creat(void)定义修改为:

void creat(struct student **head).

以上内容经过调试,可以使用。

==================我的程序,经过完整的调试

#include "stdafx.h"

#include "malloc.h"

#include "stdio.h"

#define NULL 0

#define LEN sizeof(struct student)

struct student

{

long num;

float score;

struct student *next;

};

int n;

void creat(struct student **head) /*定义函数,此函数带回一个指向链表头的指针*/

{

struct student *p1,*p2;

n=0;

do

{

p1=(struct student *)malloc(LEN); /*开辟一个新单元*/

p1-next=NULL;

scanf("%ld,%f",p1-num,p1-score);

if(p1-num==0)

break;

n++;

if(n==1)

*head=p1;

else

p2-next=p1;

p2=p1;

} while(p1-num!=0) ;

p1=NULL;

p2=NULL;

}

void main()

{

struct student *p;

creat(p);

if(p!=NULL)

do

{

printf("%ld %5.1f\n",p-num,p-score);

p=p-next;

}while(p!=NULL);

flushall(); //清除键盘缓冲区,避免输入混淆

getchar(); //等待键盘任意输入,以便观察运算结果

}

看我的回答怎么样?


名称栏目:C语言函数的链表变量,c语言链表的使用
标题URL:http://cdxtjz.cn/article/hsojcp.html

其他资讯