C语言基础知识08---链表
目录
链表
1.1 数据结构
1.2 链表分类
1.3 链表名词
1.4 函数名:malloc()
1.5 函数名字:free()
1.6 头插法&&尾插法
链表
1.1 数据结构
线性结构
顺序表: 一对一 数组
链式表: 一对一 链表
非线性结构
树结构: 一对多 树
网状结构:多对多
数据的逻辑关系+数据的物理存储+算法
1.2 链表分类
单向链表
双向链表
循环链表
1.3 链表名词
节点:每个存储单元
节点内部:
数据域:存储信息的成员
指针域:存储节点地址的指针
头节点:第一个节点,为了操作方便,数据域为空
尾节点:最后一个节点,指针域为 NULL
信息节点:存储数据的节点
头指针:保存头节点的地址
1.4 函数名:malloc()
include <stdlib.h>
函数原型:void *malloc(size_t size);
函数功能:在堆区申请空间
函数参数: size: 空间大小 --- sizeof(数据类型)
函数返回值:申请成功,返回空间地址
申请失败,返回 NULL
1.5 函数名字:free()
函数原型:void free(void *ptr);
函数功能:释放空间
1.6 头插法&&尾插法
#include <stdio.h>
struct info{
int class;
char name[20];
int id;
};
typedef struct node{
struct info inf; // 数据域
struct node * next; // 指针域
}Node;
/*Node * head = (Node *)malloc(sizeof(Node));
memset(head, 0, sizeof(Node));
head->next = (Node *)malloc(sizeof(Node));
memset(head->next, 0, sizeof(Node));*/
Node * Node_Creat(void)
{
Node * new = NULL;
new = (Node *)malloc(sizeof(Node));
if(new == NULL)
{
perror(“malloc”);
return NULL;
}
memset(new, 0, sizeof(Node));
return new;
}
int main()
{
Node *head = Node_Creat();
if(head == NULL)
{
return 0;
}
while(1)
{
switch()
{
case 1: Node_Add(head);
break;
}
}
return 0;
}
void Node_Add(Node *head)
{
Node * new = Node_Creat();
if(new == NULL)
{
printf(“申请失败!\n”);
return ;
}
//头插法
new->next = head->next;
head->next = new;
//尾插法
Node *p = head;
while(p->next!=NULL)
{
p = p->next;
}
p->next = new;
scanf(“%d”, &new->inf.class);
}