数据结构C语言第二版:单链表的建立:尾插法,前插法,任意位置插入法
文章目录
- 单链表的建立方式
- 一、尾插法
- 二、前插法
-
- 1.引入库
- 总结
单链表的建立方式 尾插法: 利用尾部结点的NULL 这个核心去突破
前插法:直接暴力赋值便可
提示:以下是本篇文章正文内容,下面案例可供参考
一、尾插法 尾插法的核心:利用单链表最后一个结点指向NULL为条件,进行插入。
//尾插入法
void tail_insert(RNode* head, int x)
{
RNode* p = initnode();
//每次都生成一个结点
p->data = https://www.it610.com/article/x;
if (head == NULL)
{
head->next = p;
//当只有头结点的时候
}
else
{
while (head->next != NULL)
{
head = head->next;
//寻找最后一个结点指向NULL
}
head->next = p;
//将生成的结点的位置赋值给最后一个结点
}
}
二、前插法
//前插法
void front_insert(RNode* head, int x)
{
RNode* p = initnode();
//生成一个新结点
p->data = https://www.it610.com/article/x;
if (head->next == NULL)
{
head->next = p;
//如果为一个空链表就直接赋值
}
else {
p->next = head->next;
head->next = p;
/*这是把头结点指针域的值赋值新生成的结点指针域
头指针的指针在指向新生成的结点
这样就实现了前插法构建单链表
*/
}
}
1.引入库 代码如下(示例):
#include//调用基本输入/输出库文件
#include//调用标准库头文件,malloc函数在这个头文件中
#include//使用系统库文件,暂停一下,看到执行结果
总结
#include.h>
#include.h>
#includetypedef struct Node
{
int data;
struct Node* next;
}RNode;
//生成一个结点
RNode* initnode()
{
RNode* node;
node = (struct Node*)malloc(sizeof(struct Node));
node->data = https://www.it610.com/article/0;
node->next = NULL;
return node;
}//生成一个链表
RNode* createlink()
{
RNode* head;
head = initnode();
head->next = NULL;
//生成了一个循环链表
return head;
}//尾插入法
void tail_insert(RNode* head, int x)
{
RNode* p = initnode();
//每次都必须生成一个结点
p->data = https://www.it610.com/article/x;
if (head == NULL)
{
head->next = p;
}
else
{
while (head->next != NULL)
{
head = head->next;
}
head->next = p;
}
}//前插法
void front_insert(RNode* head, int x)
{
RNode* p = initnode();
//生成一个新结点
p->data = https://www.it610.com/article/x;
if (head->next == NULL)
{
head->next = p;
}
else {
p->next = head->next;
head->next = p;
}
}void clear(RNode *head)
{
head->next = NULL;
}//打印函数
void display(RNode *head)
{
RNode* p;
p = head->next;
while (p != NULL)
{
printf("%d->", p->data);
p = p->next;
}
printf("NULL");
}int main()
{
RNode* linklist;
linklist = createlink();
for (int i = 2;
i < 10;
i++)
{
tail_insert(linklist, i);
}
display(linklist);
clear(linklist);
//清空单链表
printf("\n");
for (int i = 9;
i > 1;
i--)
{
front_insert(linklist, i);
}
display(linklist);
system("pause");
return 0;
}结果:
利用尾插法构建的单链表:
2->3->4->5->6->7->8->9->NULL
利用前插法构建的单链表:
2->3->4->5->6->7->8->9->NULL
介绍:
这里前插法我利用的for循环将9~2
的顺序插入到头结点之后,
目的是为了让大家更直观的看到前插的效果。
【笔记|C语言版单链表的建立方式】总结:前插法和尾插法都是单链表建立的方法,区别在于一个是在头部插进, 一个是在尾部插入,但其实基本步骤一致,只不过插入的方式不同, 比如尾插需要找指向NULL的结点,而前插法不需要。
推荐阅读
- 数据结构(C语言实现)|数据结构和算法复杂度简述
- 数据结构(C语言实现)|顺序表C语言版
- 数据结构与算法|C语言 创建单链表
- 数据结构|C语言单链表定义及各类操作
- 数据结构|反向遍历单链表 C语言版
- C语言进阶|【这些题我一拿到手就会】C指针和数组试题详解(上)
- 数据结构|3000字带你深入理解二叉树(图解剖析)
- 数据结构->顺序表的操作
- c语言表白源代码