首页 > 编程语言 >数组和链表-《算法图解》学习

数组和链表-《算法图解》学习

时间:2024-06-23 22:43:53浏览次数:27  
标签:存储 LinkedList 元素 sites 链表 算法 图解 节点

内存工作原理

需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址。需要存 储多项数据时,有两种基本方式——数组和链表。但它们并非都适用于所有的情形,因此知道它 们的差别很重要。接下来介绍数组和链表以及它们的优缺点。   ==============to be conntinued================

1、什么是链表Java LinkedList

标准答案:链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,有一系列结点(地址)组成,结点可动态的生成。

个人理解:链表是离散的表,n个节点组成,每个节点有2部分:1个是本节点存储的数据,1个是下一个节点的地址(指向下一个节点的指针)。操作系统上为了提高内存管理的效率,存储数据时有离散算法,那么链表应该也是为了提高数据的存储效率的一种数据类型。

 

与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。

以下情况使用 ArrayList :

  • 频繁访问列表中的某一个元素。
  • 只需要在列表末尾进行添加和删除元素操作。

以下情况使用 LinkedList :

  • 你需要通过循环迭代来访问列表中的某些元素。
  • 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。// 引入 LinkedList 类
import java.util.LinkedList;

public class RunoobTest {
    public static void main(String[] args) {
        LinkedList<String> sites = new LinkedList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
// 使用 addLast() 在尾部添加元素
        sites.addLast("Wiki");
// 使用 removeFirst() 移除头部元素
        sites.removeFirst();
// 使用 removeLast() 移除尾部元素
        sites.removeLast();
// 使用 getFirst() 获取头部元素
        System.out.println(sites.getFirst());
// 使用 getLast() 获取尾部元素
        System.out.println(sites.getLast());
//可以使用 for 配合 size() 方法来迭代列表中的元素:
for (int size = sites.size(), i = 0; i < size; i++) {
            System.out.println(sites.get(i)); System.out.println(sites); } }

  

2、链表C语言

2.1创建链表节点create_node

2.2插入节点

 2.3遍历链表

void show(struct node  *p)
{	
	while(1)
	{		
		if(p== NULL)  //假设p已经为NULL则返回 
		{
			return ;
		}				
		printf("p=%d\n",p->data);		
		p  = p->next;  //链表的重要知识点!!! 遍历节点向下走 		
	}	
}

3、链表算法题

标签:存储,LinkedList,元素,sites,链表,算法,图解,节点
From: https://www.cnblogs.com/mimihuhudeliwu/p/18237754

相关文章

  • 【TWVRP】遗传算法求解带时间窗的载重约束外卖配送车辆路径规划问题【含Matlab源码 14
    ......
  • Rabin Karp 算法
    RabinKarp算法RabinKarp算法,简称RK算法,是由MichaelOserRabin和RichardManningKarp在1987年提出的字符串搜索算法。该算法主要用于在文本中搜索单个模式串的位置,其基于哈希函数的原理,将字符串和模式都映射为一个整数值,并通过比较这些整数值来确定它们是否匹......
  • 目标检测经典算法及其应用
    目标检测是计算机视觉领域中的一项核心技术,它旨在让计算机能够像人眼一样识别和定位图像或视频中的物体。具体来说,目标检测不仅需要识别出图像或视频中有哪些对象,还要确定它们在图像或视频中的位置(通常以边界框的形式表示)以及它们的类别。目标检测的基本框架通常包括三个主要......
  • 算法设计与分析复习总结(一)
    算法分析与设计复习总结第一章算法概述算法与程序算法的四条性质程序的特点算法复杂度分析时间复杂度关于拉斯维加斯算法工作原理保证正确性的原因例子:快速选择算法(Quickselect)形式化证明结论计算模型基本计算模型NP完全性理论约化的概念几类问题的韦恩关系图P问题(P......
  • 算法训练营第六十七天 | 卡码网110 字符串接龙、卡码网105 有向图的完全可达性、卡码
    卡码网110字符串接龙这题一开始用的邻接表+dfs,不幸超时#include<iostream>#include<list>#include<string>#include<vector>usingnamespacestd;intminLen=501;boolcount(stringa,stringb){intnum=0;for(inti=0;i<a.lengt......
  • Java链表
    在Java中,链表是一种动态数据结构,它不需要在内存中分配一块连续的空间,而是通过指针将节点连接起来。链表由节点(Node)的集合组成,每个节点包含两部分内容:数据(data)和指向下一个节点的引用(next)。Java中常见的链表类型有单向链表、双向链表和循环链表:单向链表(SinglyLinkedList):每......
  • 基础算法(1)
    文章目录数学函数math.h(cmath)头文件float.h头文件拆位拆位进阶奇偶判断质数判断在c++中,会涉及到一些算法,例如递归、递推、动态规划(DP)、深搜(DFS)、广搜(BFS)……今天我们要说的是一些简单的算法数学函数math.h(cmath)头文件选择任意一个头文件#include<cmath>//仅......
  • 【Matlab】LSTM长短期记忆神经网络分类算法(附代码)
      资源下载: https://download.csdn.net/download/vvoennvv/89465998 分类算法资源合集:https://download.csdn.net/download/vvoennvv/89466519 目录MatlabSVM支持向量机分类算法MatlabRF随机森林分类算法MatlabRBF径向基神经网络分类算法MatlabPSO-BP基于粒子......
  • [算法篇] 简单讲讲一维前缀和与差分
    前缀和:先给定义:指某序列的前n项和是不是与我们高中所学的数列求和类似?给出用途: 如我们于一组长度为n的整数序列中询问m次,每次询问中输出区间[l,r]中数之和倘若我们先不使用前缀和,预测一下思路将会是:m次询问中,每一次都求和数组[l,r]时间复杂度为O(n),思路很简单但若m非常大则将......
  • 【面经】超全版本AIGC算法工程师面经
    AIGC算法工程师面经1.个人项目介绍1.1如何介绍1.2加分点1.3注意事项2.深度学习基础2.1公式理解类2.2模型训练通识3.细分算法3.1NLP问题3.2Transformer细节问题3.3大模型问题本篇为来自各大厂从业者等业内人士做的免费面经总结,希望能为想进入或者即将入......