链表的C语言实现之单链表的实现

链表的C语言实现之单链表的实现,第1张

链表的C语言实现之单链表的实现,第2张

第一,建立单链表

有了动态内存分配的基础,链表就不难实现了。

所谓链表,就是用一组任意的存储单元来存储线性表元素的数据结构。链表分为单链表、双向链表和循环链表。先说单链表。所谓单链表,就是数据触点按一个方向排列。单个链表节点,其结构类型分为两部分:

1.数据字段:用于存储自己的数据。

2.链字段或指针字段:用于存储下一个节点的地址或指向其直接后继节点的指针。

示例:

typedef结构节点
{
char name[20];
struct node * link;
}梭哈;

因此,定义了单个链表结构,其中char name[20]是用于存储名称的字符数组,pointer *link是用于存储其直接后继的指针。

定义好链表的结构后,程序运行时只要在love数据域中存储合适的数据,如果有后继节点,链域就指向它的直接后继,如果没有,就设置为NULL。

我们来看一个完整的建立带表头的单链表的程序(除非特别说明,下面提到的链表都是有表头的)。

# include < stdio . h >
# include < malloc . h >/*包含动态内存分配函数的头文件*/
#define N 10 /*N是人数*/
typedef结构节点
{

struct node * link;
}梭哈;
stud * creat(int n) /*构建单链表的函数,其中形参n为人数*/
{
stud *p,*h,* s;/* *h保存头节点的指针,*p指向当前节点的上一个节点,*s指向当前节点*/
int I;/* counter */
if((h =(stud *)malloc(sizeof(stud)))= = null)/* allocate空and detect */
{
printf("无法分配内存);
退出(0);
}
h--> name[0]= ' \ 0 ';/*将表头节点的数据字段设置为空*/
h-> link = null;/*设置头节点的链域为空*/
p = h;/*p指向头节点*/
for(I = 0;I < n;++)
{
if((s =(stud *)malloc(sizeof(stud)))= = null)/*分配新存储空并检查*/
{
。);
退出(0);
}
p-> link = s;/*将S的地址赋给P所指向的节点的链域,从而连接P和S所指向的节点*/
printf("请输入%d人的名字",I+1);
scanf("%s ",s-> name);/*在当前节点的数据字段中存储name */
S--> link = null;
p = s;
}
return(h);
}
main()
{
int number;/*被救人数的变量*/
stud * head;/*head是指向单链表头节点地址的指针*/
number = N;
head = creat(number);/*将新创建的单链表头地址分配给head*/
}

这样就写出了一个包含n个名字的单链表。写动态内存分配的程序要注意。请尝试检查分配是否成功。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 链表的C语言实现之单链表的实现

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情