`
v5qqcom
  • 浏览: 1281820 次
文章分类
社区版块
存档分类
最新评论

C语言实现线性结构创建动态链表的学习心得(一)

 
阅读更多

/*处理动态链表所需要的函数
1、malloc函数
原型为: void *malloc(unsigned int size);
其作用是在动态存储区中分配一个长度为size的连续空间。
此函数返回值是一个指向分配域起始地址的指针(基类型为void).如果此函数未能分配成功地执行(例如内存空间不足)则返回空指针(NULL).

void型是指(void指针型类型,可定义一个指针变量,但不指定它是指向哪一种类型数据。void类型的指针指向一个抽象的类型的数据,
如果要使void型指针赋新值,得进行强制类型转换。例(struct student *p)将void类型的指针P强制转换成struct student类型

2、calloc函数
原型:void *calloc(unsigned n,unsigned size);
其作用是在内存的动态区存储中分配n个长度为size的连续空间,函数返回一个指向分配起始域地址的指针;如果分配不成功,返回NULL
(可为一维数组开辟动态存储空间,n为数组元素的个数,每个元素长度为size.

3、free函数
原型:void free(void *p);
其作用是释放由P指向的内存区,使这部分内存区能被其它变量使用。P是最近一次调用的calloc或malloc函数时返回的值。free无返回值。
*/

#define NULL 0
#define LEN sizeof(struct student)//宏定义
/*定义结构体类型*/
struct student
{
long num;
float score;
struct student *next;
};
int n;//n为全局变量,本模块中各函数均可使用它
struct student *creat(void)
{
struct student *head;
struct student *p1,*p2;
n=0;
p1=p2=(struct student *)malloc(LEN);//开辟一个新单元,返回的指针强制转化成结构体struct student型,并使p1,p2指向这个单元
scanf("%ld,%f",p1->num,p1->score);
head=NULL;
/*开辟出了一个空间,但是并没有连到链中去,头指针head并没有指向它*/
while(p1->num!=0)
{
n=n+1;
if (n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(struct student *)malloc(LEN);
scanf("%ld,%f",&p1->num,&p1->score);
}
p2->next =NULL;
return(head);
}

//以上写的创建结点的函数,今天就写到这吧,今天太累了,明天接着写!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics