IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 基于C构造单链表 -> 正文阅读

[数据结构与算法]基于C构造单链表

概念

其所有节点除了包含自己存储的元素,还能够指向其他结点(地址)
优点
不要求大片连续空间,改变容量方便
缺点
不可随机存取,要耗费一定空间存放指针

创建

头插法

#include"head.h"
typedef int ElemType;
typedef struct Node
{
	ElemType data;
	struct Node* next;
	int length;
}LNode,*LinkList;//用来区分表和点

LinkList InitList1()
{
	printf("头插法\n");
	LinkList head = (LinkList)malloc(sizeof(LNode));//创建一个头
	LNode* node = NULL;//定义新节点

	head->next = NULL;
	node = head->next;//新节点的下一位永远指向空
	printf("创建几个节点?\n");
	int cnt;
	scanf("%d", &cnt);
	for (int i = 0; i < cnt; i++)
	{
		node = (LinkList)malloc(sizeof(LNode));//为新节点开辟空间
		int value;
		printf("请输入节点元素值\n");
		scanf("%d", &value);
		node->data = value;//为新节点赋值,node存放的data为value
		node->next = head->next;//将头指针所指的下一个节点赋值给新节点所指的下一个位置
		head->next = node;//将新节点的位置赋值给head所指的下一个位置
	}
	return head;
}
LinkList TraverseList(LinkList head)
{
	int i = 1;
	while (head->next!=NULL)//head本身不存参数,若下一位非空则输入合法
	{
		head = head->next;//表的数值从head所指的下一个节点开始算
		printf("元素%d:%d\n",i,head->data);
		i++;
	}
	return 0;
}
int main()
{
	LinkList head = InitList1();
	TraverseList(head);
}

结果
在这里插入图片描述
注:
①头插法,顾名思义,在头结点后依次插入,新来的元素总会在头结点后面,因此输出也为倒序输出,相对不直观,因此个人喜欢尾插法。
②head.h头文件是个人所写,只是为了防止vs报错,正常用stdio.h之类的也可以

尾插法

LinkList InitList2()
{
	printf("尾插法\n");
	LinkList head = (LinkList)malloc(sizeof(LNode));
	LNode* node = NULL;
	LNode* end = NULL;
	head->next = NULL;
	end = head;
	printf("创建几个节点?\n");
	int cnt;
	scanf("%d", &cnt);
	for (int i = 0; i < cnt; i++)
	{
		node = (LinkList)malloc(sizeof(LNode));//为新节点开辟空间
		int value;
		printf("请输入节点元素值\n");
		scanf("%d", &value);
		node->data = value;
		end->next = node;
		end = node;
	}
	end->next = NULL;
	return head;//必须返回一个值
}

运行结果
在这里插入图片描述

插入节点

头插法

LinkList Insert(LinkList head)
{
	LNode* node = (LinkList)malloc(sizeof(LNode));
	int n, elem;
	printf("请输入需要插入的元素(头插)\n");
	scanf("%d",&elem);
	node->data = elem;
	node->next = head->next;
	head->next = node;
	printf("插入元素%d成功\n",node->data);
	return head;
}

尾插法

LinkList Insert2(LinkList head)
{
	LNode* node = (LinkList)malloc(sizeof(LNode));
	int n, elem;
	printf("请输入需要插入的元素(尾插)\n");
	scanf("%d", &elem);
	node->data = elem;
	while (head->next)
	{
		head = head->next;
	}
	head->next = node;
	node->next = NULL;
	printf("插入元素%d成功\n", node->data);
	return head;
}

中间插入

LinkList Insert3(LinkList head)//无法头插
{
	int n, elem;
	printf("新插入的元素放置の位置\n");
	scanf("%d", &n);
	printf("请输入要插入的元素\n");
	scanf("%d", &elem);
	LNode* node = (LinkList)malloc(sizeof(LNode));
	node->next = NULL;
	node->data = elem;
	int len = 0;
	while (head->next)
	{
		len++;
		head = head->next;
		if (len == n)
		{
			node->next = head->next;
			head->next = node;
		}
	}
	//printf("表长:%d\n", len);
	return head;
	
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-13 09:31:11  更:2021-09-13 09:32:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 11:12:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码