成都网站建设设计

将想法与焦点和您一起共享

c语言链式结构定义函数 c语言链式编程

c语言结构体(链表)操作函数

if中可以赋值给head的理由很简单。

创新互联建站专注于政和企业网站建设,响应式网站设计,商城网站开发。政和网站建设公司,为政和等地区提供建站服务。全流程按需搭建网站,专业设计,全程项目跟踪,创新互联建站专业和态度为您提供的服务

因为 if(PTScount(head) == 0)

if判断的就是看它是不是 第一个元素。

如果是第一个元素,自然直接将ins赋值给head。

head所代表的就是第一个元素。

如果到了else这里,那么很明显就不是第一个元素了。

那这个时候肯定就不可以直接复制给head了呀,因为head可是代表第一个元素呀。

所以,你这是肯定改不了的。

C语言数据结构链队的主函数怎么调用?主函数怎么写?

主函数里调用就像写函数定义一样,比如调用创建表的,就这样:

#include stdio.h

struct Linklist { 

...

};

typedef Linklist* LinkList;

int CreateList(LinkList LstMe) {

...

}  

int main() {

LinkList LstDemo = (LinkList) malloc (sizeof(Linklist));

CreateList(LstDemo); // 调用建表

free (LstDemo);

return 0;

}

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://chengdu.cdxwcx.cn/article/hihieo.html