顺序表与链表,栈与队列

名词辨析:指针

1.什么是指针,想必大家都不陌生,但是,在这部分的知识中,包含着一类特殊的指针,表面上它只是单个的数字,但它其实代表了作为栈或者队列载体的数组的下标,在实际题目中数组的第一个与最后一个元素的下标可能是不断变化的,所以需要两个数字来记录其位置让我们可以快速找到我们的目标数据。

名词辨析:栈

1.想必各位小伙伴都知道,我们的计算机的组成部分有栈,堆等,但是此栈非彼栈,数据结构中使用的栈,是一种程序员定义的数据存储方式,它的存储方式类似与计算机中的栈,先进后出,在理解的时候可以将栈理解为一口井,存储数据就是将数据扔到井里,取出数据就是将数据从井里捞出来,顺序就便于理解了

时空复杂度

1.时间复杂度就是一段代码的时间成本,而判断背景是当数组,循环无限大时,所以,固定次数的循环或其他代码步骤直接默认为1,而递归类计算需要列式,因为可能用到复杂的数学公式。

2.空间复杂度就是一段代码的空间成本,即额外占用的函数栈帧,判断的重点在于判断递归调用的次数

3.相加相乘原则:任何相加或者相乘得到的结果,数字直接省略(除了没有循环的情况,直接为1)

4.表示形式:O(时空复杂度)

顺序表与链表

1.顺序表是数组的别名,存储在物理空间是连续的

2.链表是一组结构体,存储的物理空间是不连续的

3.二者的优劣:

顺序表和链表的存储方式,可以作为栈和队列的不同实现形式,而二者的实现需要程序员根据题目的不同情况进行选择。

重要的初始化函数malloc

1.首先介绍一下malloc函数的使用方式:动态内存管理-CSDN博客

2.在该部分的内容中,数组以及结构体都使用指针代替,而在初始化中必须使用malloc函数对指针进行初始化以避免野指针,在以指针作为数据成员时,要主动辨析初始化时是使用malloc函数还是赋NULL,同理,使用malloc可以不free,一般不报错(尽量使用使代码严谨),但是只要使用free释放一个指针后必须在下一步将指针重新赋值或者赋NULL,否则会造成内存泄漏

单链表

1.首先先熟悉一下单链表的操作:

单链表前插-CSDN博客

单链表的尾插-CSDN博客

单链表的尾插(一级指针尾插的缺陷及改进)-CSDN博客

单链表的删除-CSDN博客

2.单链表的难点:二级结构体指针与一级结构体指针的选择。二级指针在于是否需要改变一级结构体的指针且该指针不是结构体的成员,而一级指针最为常用,一般用于修改结构体的内部成员。

3.单链表的本质:一组可以按顺序找到的结构体,存有一组特定的数据

栈与队列

1.栈是一种数据存储形式,遵循先进后出的原则,队列也是一种数据存储模式,遵循先进先出的原则

2.先来熟悉一下格式栈的基本知识-CSDN博客

队列的基本知识-CSDN博客

刷题经验总结

1.特殊情况:

        1.空与满:空时不能删,满时不能放,其中要区分空与未初始化

        2.前后对称纠错法:也就是顺序问题,在题目中我们经常会遇到修改某表块时要同时改前面的表块再改后面的表块,所以当我们凭借肌肉记忆写出改表代码时,我们很可能会遇到把前面改了结果找不到后面指针的情况,此时应快速浏览代码,观察某式的左值是否出现了两次,出现则需细细甄别

        3.为什么不动?在修改表块时总能出现这个问题,解决方法为使用二级指针识别一级指针的地址,一般用于头指针与头删头插,尾指针与尾插尾删

        4.开头赋值:当你不想改变头指针位置但又想改表时,会自己创建指针进行运算,而此时赋值不能直接在代码一开始赋值,必须在循环开始改表开始时进行赋值操作,否则会出现空指针问题

2.特殊方法

        1.尾插比较法:用于两个链表,两个指针,每次比较后将大或小的一项对新链表进行尾插,在两个链表的其中一个结束时循环结束,将剩余链表直接接在新链表的后面

        2.快慢指针法:首先当快指针一次两步,慢指针一次一步时,相遇就会说明遇到了环形链表,其次可以返回任意倒数的表块,但使用时需要进行判空和讨论

        3.带头和双向的链表:带头也就是哨兵位,它的好处是不会改变头指针的位置,无需使用二级指针,而双向链表的好处是可以前后互相寻找

        4.环形链表:一般用于约瑟夫问题,循环删除,当表块的next为自身时循环结束

        5.顺序表和链表的选择:在栈和队列中,我们会遇到选择顺序表还是单链表的问题,而二者的主要差距在于顺序表可以轻松通过“指针”来找到任意位置的数据,且可以与字符,字符串相关联,而链表的好处在于可以进行灵活的内部操作,且当使用队列与栈相互表示时采用单链表可以使读者拥有更好的逻辑关系,在双队列双栈的转化时可以更加自如

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/249281.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang语言异常机制解析:错误策略与优雅处理

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站https://www.captainbed.cn/kitie。 前言 作为开发者来说,我们没办法保证程序在运行过程中永远不会出现异常,对于异常…

Java多线程编程中的异常处理策略

第1章:引言 大家好,我是小黑,咱们今天聊聊异常处理。想必大家在写代码的时候都遇到过各种各样的异常吧?有时候,一个小小的异常如果处理不当,就可能导致整个程序崩溃。特别是在多线程环境下,异常…

科技云报道:云原生PaaS,如何让金融业数字化开出“繁花”?

科技云报道原创。 在中国金融业数字化转型的历史长卷中,过去十年无疑是一部磅礴的史诗。 2017年,南京银行第一次将传统线下金融业务搬到了线上。那一年,它的互联网金融信贷业务实现了过去10年的业务总额。 2021年,富滇银行通过…

幻兽帕鲁服务器游戏怎么升级版本?

幻兽帕鲁服务器游戏怎么升级版本?自建幻兽帕鲁服务器进入Palworld游戏提示“您正尝试加入的比赛正在运行不兼容的游戏版本,请尝试升级游戏版本”什么原因?这是由于你的客户端和幻兽帕鲁服务器版本不匹配,如何解决?更新…

配置IPv6静态路由

1、静态路由简介 静态路由是一种需要管理员手工配置的特殊路由。 静态路由在不同网络环境中有不同的目的: 当网络结构比较简单时,只需配置静态路由就可以使网络正常工作。 在复杂网络环境中,配置静态路由可以改进网络的性能,并…

Synchronized作用

synchronized能够在同一时刻最多只有一个线程执行该代码 证明如下: public class MyThread {public static void main(String[] args) throws InterruptedException {Ticket ticket new Ticket();Thread aa new Thread(() -> {try {ticket.getCount();} catc…

性能测试工具架构

背景 性能测试工具(LoadRunner为例) 性能测试工具通常是指那些用来支持压力、负载测试,能够录制和生成脚本、设置和部署场景、产生并发用户和向系统施加持续压力的工具。 性能测试工具录制的是服务端与应用之间的通信数据,而不是…

怎么进行视频压缩大小?常见的4种压缩方法

在当今数字化的时代,我们经常处理大量的视频文件,无论是用于社交媒体分享、视频制作还是存储在我们的设备中。然而,随着视频质量的提升和分辨率的增加,视频文件的大小也相应地变得更加庞大,给存储、分享和传输带来了一…

hal库stm32串口接收不定长数据

参考博客: https://blog.csdn.net/qq_41830158/article/details/121254705 按下面步骤修改实测可用 步骤: 添加串口接收所需变量   打开uart.c文件,在文件顶部的USER CODE BEGIN 0下方添加下列变量 volatile uint8_t rx1_len 0; //接收…

友思特应用 | 微观指尖世界:OCT成像应用之3D指纹提取与识别

欢迎访问官网,探索丰富案例: OCT成像系统 | 光学相干断层扫描 | 谱域OCT | 扫频OCT | 广州友思特科技有限公司 关注“友思特机器视觉与光电”公众号、加入行业交流群或直接联系我们,轻松收获更多技术干货 导读 数字化生活已离不开指纹识别认…

《区块链简易速速上手小册》第6章:区块链在金融服务领域的应用(2024 最新版)

文章目录 6.1 金融服务中的区块链6.1.1 金融服务中区块链的基础6.1.2 主要案例:跨境支付6.1.3 拓展案例 1:去中心化金融(DeFi)6.1.4 拓展案例 2:代币化资产 6.2 区块链在支付系统中的作用6.2.1 支付系统中区块链的基础…

小程序定制开发前,应该考虑些什么?

引言 在移动互联网时代,小程序已经成为许多企业和个人推广业务、提供服务的理想平台。然而,在进行小程序定制开发之前,开发者和业务方需要细致入微地考虑一系列关键因素,以确保最终的小程序既能满足用户需求,又能够顺…

arcgis 批量删除字段

一、打开ArcToolbox-数据管理工具-字段-删除字段。 二、在输入表中选择要删除字段的要素,在删除字段栏中选择要删除的字段,点击确认即可。

Java强训day13(选择题编程题)

选择题 编程题 题目1 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String s sc.nextLine();char[] c s.toCharArray();int i 0;int t 0;while (i < c.length) {if (c[i] ! \") {…

Go语言基础之单元测试

1.go test工具 Go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程是类似的&#xff0c;并不需要学习新的语法、规则或工具。 go test命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内&#xff0c;所有以_test.go为后缀名的源代码文件都是go …

Maven的Docker镜像二次打包,再次推送至Harbor中

之所以如此操作&#xff0c;主要原因是&#xff0c;官版的镜像中默认的setting.xml已内置好&#xff0c;不容易修改&#xff0c; 重新二次打包&#xff0c;可以指定我们自己的setting.xml配置&#xff0c;配置自己的私服地址以及解决默认Maven仓库国内下载速度慢的问题 一、创…

ssl数字证书是什么

SSL证书是一种数字证书&#xff0c;用于在网络传输中提供加密和身份验证功能&#xff0c;从而保护数据的安全性和完整性。正规的SSL证书大多是由由权威的证书颁发机构&#xff08;CA&#xff09;颁发的&#xff0c;例如Certum、Digicert、Sectigo等&#xff0c;它们颁发的SSL数…

[机器学习]简单线性回归——最小二乘法

一.线性回归及最小二乘法概念 2.代码实现 # 0.引入依赖 import numpy as np import matplotlib.pyplot as plt# 1.导入数据 points np.genfromtxt(data.csv, delimiter,) # points[0,0]# 提取points中的两列数据&#xff0c;分别作为x&#xff0c;y x points[:, 0] y poi…

【Linux】初始进程地址空间

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 目录 一、再谈fork二、程序地址空间2.1代码验证 三、虚拟地址&am…

Https加密超文本传输协议的运用

一、https的相关知识 1.1 https的简介 HTTPS &#xff08;全称&#xff1a;Hypertext Transfer Protocol Secure &#xff09;&#xff0c;是以安全为目标的 HTTP 通道&#xff0c;在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加…