前段时间,我看见许多在问答社的人都在问链表相关的题,正好我也打算写点链表的东西。这次首先是写一个创建链表的函数吧,由于我是听朱老师的课来的,所以这里先提出来。链表就是一种数据结构,需要有一个指针指向后面的一个节点(结构),这样确保它是一条链也就是说你能从头的访问链表,因为是只有指向下一个节点的方向,它也只能从前往后的一直查看(其实还有双向链表的)。
//创建链表的小函数
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int num;
struct node *pNext;
}Node;
//创建节点函数的声明
Node *create_node(int cnt);
int main(void)
{
//定义一个头指针,指向第一个节点
Node *pHeader = NULL;
pHeader = (Node *)malloc(sizeof(struct node));
if (NULL == pHeader)
{
printf("malloc failure\n");
return 0;
}
//由于头指针一般不存数据,所以赋值为0
pHeader->num = 0;
pHeader->pNext = create_node(1);
pHeader->pNext->pNext = create_node(2);
pHeader->pNext->pNext->pNext = create_node(3);
printf("num = %d\n", pHeader->pNext->num);
printf("num = %d\n", pHeader->pNext->pNext->num);
printf("num = %d\n", pHeader->pNext->pNext->pNext->num);
return 0;
}
//创建节点函数
Node *create_node(int cnt)
{
Node *Tmp = NULL;
Tmp = (Node *)malloc(sizeof(struct node));
if (NULL == Tmp)
{
printf("In create_node, malloc failure\n");
return NULL;
}
//将函数的传参赋值,并将pNext指向NULL
Tmp->num = cnt;
Tmp->pNext = NULL;
return Tmp;
}
最后我觉得朱老师这种创建头指针的方法很好,至于这么好,我会在后面的博文继续说。由于创建结构,需要涉及到malloc来为结构申请一块内存。在堆中,内存是有限的,很有可能你会在某一次申请内存会失败,所以做好malloc返回值的检查是很有必要的。
//创建链表的小函数
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int num;
struct node *pNext;
}Node;
//创建节点函数的声明
Node *create_node(int cnt);
int main(void)
{
//定义一个头指针,指向第一个节点
Node *pHeader = NULL;
pHeader = (Node *)malloc(sizeof(struct node));
if (NULL == pHeader)
{
printf("malloc failure\n");
return 0;
}
//由于头指针一般不存数据,所以赋值为0
pHeader->num = 0;
pHeader->pNext = create_node(1);
pHeader->pNext->pNext = create_node(2);
pHeader->pNext->pNext->pNext = create_node(3);
printf("num = %d\n", pHeader->pNext->num);
printf("num = %d\n", pHeader->pNext->pNext->num);
printf("num = %d\n", pHeader->pNext->pNext->pNext->num);
return 0;
}
//创建节点函数
Node *create_node(int cnt)
{
Node *Tmp = NULL;
Tmp = (Node *)malloc(sizeof(struct node));
if (NULL == Tmp)
{
printf("In create_node, malloc failure\n");
return NULL;
}
//将函数的传参赋值,并将pNext指向NULL
Tmp->num = cnt;
Tmp->pNext = NULL;
return Tmp;
}
最后我觉得朱老师这种创建头指针的方法很好,至于这么好,我会在后面的博文继续说。由于创建结构,需要涉及到malloc来为结构申请一块内存。在堆中,内存是有限的,很有可能你会在某一次申请内存会失败,所以做好malloc返回值的检查是很有必要的。