iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言数据结构与算法之链表(二)
  • 552
分享到

C语言数据结构与算法之链表(二)

2024-04-02 19:04:59 552人浏览 八月长安
摘要

目录引入模拟链表介绍插入代码实现代码实现  引入 在上一节的学习中我们介绍了C语言如何实现链表,但是,在这一章,我们将抛开令人头秃的指针和结构体,我们将另外使用一种数组来实现的方式,

引入

在上一节的学习中我们介绍了C语言如何实现链表,但是,在这一章,我们将抛开令人头秃的指针和结构体,我们将另外使用一种数组来实现的方式,叫做模拟链表。让我们一起来看看。

模拟链表介绍

链表中的每一个结点都只有两个部分。

我们可以使用一个数组date来储存每序列中的每一个数。那每一个数右边的数是谁,这一点该如何解决呢?在上一章的内容中我们是使用指针来解决的,这里我们只需再用一个数组right来存放序列中每一个数右边的数是谁就可以了。具体要怎么做呢?

上面的两个数组中,第一个整型数组date是用来存放序列中的具体数字的,另外一个整型数组right是用来存放当前序列中每一个元素右边的元素在数组date中位置的。

例如right【1】的值为2,就表示当前序列中1号元素右边的元素存放在date【2】 中;如果是0,例如right【9】的值为0,就表示当前序列中9号元素的右边没有元素。

现在需要在8面前插入一个6,只需将6直接存在数组date的末尾即date【10】 = 6.

接下来只需要将right【3】改为10,表明新序列中3号元素右边的元素存放在date【10】中。再将right【10】的值改为4,表示新序列中10号元素右边的元素存放在date【4】中。

这样我们通过right数组就可以从头到尾遍历整个序列了(序列的每个元素的值存放在对应的数组date中),如下

插入代码实现


	//从链表的头部开始遍历
	t = 1;
	while(t != 0)
	{
		//如果当前结点下一个结点的值大于待插入数,将数插到中间
		if(date[right[t]] > date[len])
		{
			right[len] = right[t];   //新插入的数的下一个结点标号等于当前结点的下一个标号
			right[t] = len;			 //当前结点的下一个结点编号就是新插入数的编号
			break;					 //插入完成跳出循环
		}
		t = right[t];
	}

代码实现  


#include <stdio.h>
int main()
{
	int date[101],right[101];
	int i,n,t,len;
	//读入已有的数
	scanf("%d",&n);
	for(i = 1;i <= n;i++)
		scanf("%d",&date[i]);
	len = n;
 
	//初始化数组right
	for(i = 1;i <= n;i++)
	{
		if(i != n)
			right[i] = i + 1;
		else
			right[i] = 0;
	}
 
	//直接在数组date的末尾加一个数
	len++;
	scanf("%d",&date[len]);
 
	//从链表的头部开始遍历
	t = 1;
	while(t != 0)
	{
		//如果当前结点下一个结点的值大于待插入数,将数插到中间
		if(date[right[t]] > date[len])
		{
			right[len] = right[t];   //新插入的数的下一个结点标号等于当前结点的下一个标号
			right[t] = len;			 //当前结点的下一个结点编号就是新插入数的编号
			break;					 //插入完成跳出循环
		}
		t = right[t];
	}
 
 
	//输出链表中的所有数
	t = 1;
	while(t != 0)
	{
		printf("%d",date[t]);
		t = right[t];
	}
 
	return 0;
}

到此这篇关于C语言数据结构与算法之链表(二)的文章就介绍到这了,更多相关C语言数据结构 链表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言数据结构与算法之链表(二)

本文链接: https://www.lsjlt.com/news/159779.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言数据结构与算法之链表(二)
    目录引入模拟链表介绍插入代码实现代码实现  引入 在上一节的学习中我们介绍了C语言如何实现链表,但是,在这一章,我们将抛开令人头秃的指针和结构体,我们将另外使用一种数组来实现的方式,...
    99+
    2024-04-02
  • C语言数据结构与算法之单链表
    目录基本概念读取数据元素获取第i个结点的数据元素插入数据元素 初始化链表打印链表顺序表查空顺序表的删除 删除第i个结点及其数据元素情况1:当删除的是第一个元素情况2:除第一个结点外完...
    99+
    2024-04-02
  • C语言数据结构与算法之链表(一)
    目录引言链表的相关思考链表结点结构建立链表实现插入操作完整代码引言 在存储一大波数的时候,我们通常使用的是数组,但是数组有时候又会显得不够灵活,比如下面这个例子: 有一串已经排序好的...
    99+
    2024-04-02
  • C语言数据结构与算法之排序总结(二)
    目录一、前言二、选择类排序1.简单选择排序2.树形选择排序3.堆选择排序三、归并排序四、分配类排序1.多关键字排序2.链式基数排序五、总结归纳一、前言 之前的排序总结(一)对插入类和...
    99+
    2024-04-02
  • C语言数据结构之二叉链表创建二叉树
    目录一、思想(先序思想创建)二、创建二叉树(1)传一级参数方法(2)传二级参数方法一、思想(先序思想创建) 第一步先创建根节点,然后创建根节点左子树,开始递归创建左子树,直到递归创建...
    99+
    2024-04-02
  • C语言数据结构与算法之图的遍历(二)
    目录前言 广度优先搜索过程主要思想 代码实现  前言  在上一章的内容中我们使用了深度优先搜索来进行遍历,这一章我们选择使用广度优先搜索来完成这个图的遍历 --> 结果如下:...
    99+
    2024-04-02
  • C语言数据结构之顺序表和单链表
    一、顺序表的创建、删除和插入 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> struct sqlist { ...
    99+
    2024-04-02
  • C语言数据结构与算法之排序总结(一)
    目录一、前言二、基本概念1.排序2.排序方法的稳定性3.内部和外部排序三、插入类排序1.直接插入排序2.折半插入排序3.希尔排序四、交换类排序1.冒泡排序2.快速排序五、总结比较一、...
    99+
    2024-04-02
  • C语言数据结构之单链表的实现
    目录一.为什么使用链表二.链表的概念三.链表的实现3.1 创建链表前须知3.2 定义结构体3.3 申请一个节点3.4 链表的头插3.5 链表的尾插3.6 链表的尾删3.7 链表的头删...
    99+
    2024-04-02
  • Python数据结构与算法之链表,无序链表详解
    目录我们首先来构造节点。节点(Node)的类构建完毕后,接下来我们开始构建整个链表(LinkList)的类。那么我们还需要一个方法来判断链表头的指向。接下来我们构建链表节点的添加方法...
    99+
    2024-04-02
  • C语言数据结构之线性表的链式存储结构
    1.什么是线性表的链式存储结构 —链表 存储结点:包括元素本身的信息,还有元素之间的关系逻辑的信息 这个结点有:数据域和指针域 一个指针域:指向后继结点, 单链表 二个指针域: 指向...
    99+
    2024-04-02
  • C语言数据结构之单链表操作详解
    目录1、插入操作2、删除操作3、查找操作4、修改操作5、完整代码1、插入操作 (1)创建一个新的要插入的结点 (2)将新结点的 next 指针指向插入位置后的结点 (3)将插入位置前...
    99+
    2024-04-02
  • C语言数据结构之双链表&循环链表&静态链表详解
    目录单链表 VS 双链表双链表双链表的初始化(带头结点)双链表的插入双链表的删除双链表的遍历循环单链表循环双链表循环双链表的初始化循环双链表的插入循环双链表的删除静态链表什么是静态链...
    99+
    2024-04-02
  • C语言数据结构之单链表存储详解
    目录1、定义一个链表结点2、初始化单链表3、输出链表数据4、完整代码如果说,顺序表的所占用的内存空间是连续的,那么链表则是随机分配的不连续的,那么为了使随机分散的内存空间串联在一起形...
    99+
    2024-04-02
  • C语言数据结构之单链表怎么实现
    本文小编为大家详细介绍“C语言数据结构之单链表怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言数据结构之单链表怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一.为什么使用链表在学习链表以前,...
    99+
    2023-07-02
  • C语言数据结构之复杂链表的拷贝
    题目: 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 ...
    99+
    2024-04-02
  • C语言数据结构与算法之字符串详解
    目录串的定义串的比较 串的抽象数据类型串的初始化相关定义初始化定长类初始化串的堆式顺序存储结构(Heap)初始化堆字符串 赋值操作比较两个堆字符串的大小 串的定义...
    99+
    2024-04-02
  • C语言数据结构与算法之图的遍历(一)
    目录引入 深度优先搜索代码实现 完整代码  引入  在数据结构中常见的有深度优先搜索和广度优先搜索。为什么叫深度和广度呢?其实是针对图的遍历而言的,请看下面这个图: 图是由一些小圆...
    99+
    2024-04-02
  • C++数据结构之单链表
    目录单链表结构的定义单链表打印动态申请一个结点单链表尾插单链表尾删单链表头插单链表头删求单链表长度单链表查找单链表在pos位置插入单链表在pos后面位置插入单链表删除pos位置单链表...
    99+
    2024-04-02
  • Java数据结构与算法学习之双向链表
    目录双向链表的储存结构示意图双向链表的初始化结构1.双向链表的结点2.双向链表的头结点3.总代码双向链表中的指定文件插入元素 1.插入的为第一个位置2.其他位置插入总代码双向链表的删...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作