链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。(来源于百度百科)
malloc函数原型
void *malloc(unsigned int size);
这个函数用于申请内存,返回的是个void类型指针,所以在使用时应注意强制类型转换成需要的指针类型
free函数原型
void free(void *p);
这个函数是用来释放指针p作指向的内存区。
链表申请内存的原因
函数的局部变量是在栈里面生成的,出了函数作用域自动销毁,不能作为链表节点就是因为这个,当函数作用域结束后占用的内存将被标记为可用,就是说这块内存将会被系统重新使用。
创建节点
struct Node
{
int data; //数据域
struct Node* next; //指针域(指向下一节点的指针)
};
附上小程序
#include "stdio.h"
#include "stdlib.h" //提供malloc()和free()
#include "string.h" //提供strcpy()等
//创建节点(结构体)
struct Node
{
int data; //数据域
struct Node* next; //指针域(指向下一节点的指针)
};
void main(void)
{
//创建节点
struct Node* temp_1=(struct Node*)malloc(sizeof(struct Node)); //此处注意强制类型转换
struct Node* temp_2=(struct Node*)malloc(sizeof(struct Node)); //此处注意强制类型转换
struct Node* temp_3=(struct Node*)malloc(sizeof(struct Node)); //此处注意强制类型转换
//节点数据进行赋值
temp_1->data=10;
//节点指针指向下一节点
temp_1->next=temp_2;
temp_2->data=20;
temp_2->next=temp_3;
temp_3->data=30;
temp_3->next=NULL; //注意此处
printf("temp_1的数据为:%d\n",temp_1->data);
printf("temp_2的数据为:%d\n",temp_1->next->data);
printf("temp_2的数据为:%d\n",temp_2->data);
printf("temp_3的数据为:%d\n",temp_1->next->next->data);
printf("temp_3的数据为:%d\n",temp_3->data);
//删除 temp_2 节点
temp_1->data=10;
temp_1->next=temp_3;
temp_3->data=30;
temp_3->next=NULL; //注意此处
printf("temp_1的数据为:%d\n",temp_1->data);
printf("temp_3的数据为:%d\n",temp_1->next->data);
printf("temp_3的数据为:%d\n",temp_3->data);
//释放 temp_2
free(temp_2);
}
看懂上方小程序,链表的基本概念应该理解的差不多,后续再补充相关操作的讲解文章!
–END–
转载请注明:XAMPP中文组官网 » C语言|链表初探