k:特殊的线性表—栈

PAT 3-05 求链式线性表的倒数第K项(C语言实现) 题目描述: 给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。 输入格式说明: 输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。 输出格式说明: 输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息“NULL”。 样例输入与输出: 序号 输入 阅读详情

栈(Stack):
 栈是一种特殊的线性表,栈中的数据元素以及数据元素之间的逻辑关系和线性表相同,两者之间的差别在于:线性表的插入和删除操作可以在表的任意位置进行,而栈的插入和删除操作只允许在表的尾端进行。其中,允许进行插入和删除操作的一端称为栈顶,另一端称为栈底。通常,将元素插入栈的操作叫做入栈(push),而将元素从栈中进行删除并返回的操作叫做出栈(pop)。栈可以看成是一种受限的特殊的线性表,特殊性体现在它的插入和删除操作都是控制在线性表的一端进行的。其是一种后进先出(Last In First Out,LIFO)或者先进后出(First In Last Out,FILO)的线性表。

栈的API相关的接口(java):
public interface Stack<T>
{
 public abstract void clear();//将一个已存在的栈置空
 public abstract boolean isEmpty();//判断栈是否为空
 public abstract int length();//返回栈中数据元素的个数
 public abstract T peek();//读取栈顶元素并返回其值,但是不将栈顶的值从栈中进行删除,若栈为空,返回null
 public abstract void push(T x)throws Exception;//将数据元素x压入栈顶
 public abstract T pop();//删除并返回栈顶元素
}

 ps:对于栈,其是逻辑结构中线性结构的一种,其可以采用顺序存储结构和链式存储结构。采用顺序存储结构的栈称为顺序栈,采用链式存储结构的栈称为链栈。
 对于栈的实现,其可以通过改进的线性表对象直接进行实现,只要将相应的插入删除和返回值的操作约束在一端进行即可(对于链栈的实现,一般将其约束在头部进行入栈和出栈操作会节约栈的操作的时间复杂度),此处便不再对其进行实现。其中,通过此方式实现的顺序栈,所有的操作时间复杂度均为O(1),对于链栈其所有操作的时间复杂度也为O(1)(对于求取长度的操作,书上有些实现的时间复杂度是O(n),但是,实际上只要再加入一个变量对栈的长度在元素出入栈的时候进行统计,即可实现时间复杂度为O(1)的操作)
在java中,其栈可以直接采用Stack a=new Stack();(其中T为泛型变量)的方式进行对象的创建,其相应的类在java.util包中。

链栈和顺序栈的比较:
 对于链栈和顺序栈,其栈的所有操作时间复杂度均为O(1),其似乎并没有什么区别。但是,链栈有一个明显的优点,便是可以动态的对元素进行添加和删除,而不需要整体移动栈中的元素。而对于顺序栈,由于其数组的大小有一个容量的限制,为此,在超过数组长度的情况下,进行括容时,需要将其原先数组的全部元素完全的复制到增加了长度的数组中,从而时间上会比链栈的操作的长。对于链栈而言,其不如顺序栈的一点在于空间的浪费上要大于顺序栈,因为其除了要存储数据元素的值之外,还要存储下对应的指向下一个节点的指针。总体而言,个人感觉使用链栈会更加好一点。当然,顺序栈肯定也有其特点,不然其也不会存在(相信存在即合理),也可能只是个人没有想到而言,以后想到了再回更。

十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序 冒泡排序、选择排序、插入排序、快速排序、希尔排序 阅读详情

相关推荐

STM32F407步进电机控制及DM542驱动器使用

基于DM542驱动器的步进电机简单控制

qq_43868701的博客 1万+

栈-----------(数据结构作业)

栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据,最后一个数据被第一个读出来。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。 栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶,另一端为栈底;栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈,删除则称为退栈。栈也称为后进先出表。 压栈 void push(.

qq_70137750的博客 379

保姆级教程:用高云GW2A开发板搭建RISC-V软核处理器(含DDR3内存优化配置)

本文提供了一份详细的保姆级教程,指导开发者使用高云GW2A-LV18PG256C8 FPGA开发板搭建RISC-V软核处理器系统。教程涵盖了从开发环境搭建、PicoRV32软核集成,到关键的DDR3内存控制器配置与优化,并深入讲解了时序约束与系统调试方法,帮助初学者和爱好者实现从逻辑设计到软硬件协同的深度实践。

2a4s6d8f0g的博客 570

数据结构之栈(简单版)

1.1 栈的定义 栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示: 结论:后进先出(Last In First Out),简称为LIFO(Last In First Out)线性表,因此栈的操作是线性表操作的特例。 1.2 栈的顺序存储和链式存储 由于栈也是线性表,因此线性表的存储结构对栈也适用,通常栈

沨华洋祎的博客 703

Nordic开发者必备:SEGGER Embedded Studio免费许可证申请与配置全攻略

本文为Nordic芯片开发者提供了SEGGER Embedded Studio(SES)集成开发环境的详细配置指南。内容涵盖免费许可证的合规申请流程、项目创建、Nordic SDK集成,以及编辑器优化、构建调试配置、RTT日志输出等核心功能的高效设置,旨在帮助开发者构建深度优化的专业开发环境,显著提升嵌入式开发效率。

cheese的博客 353

芒果YOLOv7改进04:Loss篇:原创改进损失函数Repulsion:独家首发最新改进Repulsion Loss解决目标遮挡场景下检测,为解决密集人群检测中遮挡设计的损失函数,打造高效检测器涨点

YOLOv7原创改进Repulsion|首发最新改进为解决密集人群检测中遮挡设计的损失函数

包括YOLOv5、YOLOv7、YOLOv8等模型改进 3253

数据结构之栈

    栈是一种特殊的线性表,其插入和删除都是在线性表的一端进行的,只允许在栈顶进行操作,插入元素的操作称为入栈(push),删除元素称为出栈(pop).其特点就是先进后出(Last In First Out)。    栈按其存储结构的不同,可以将其分为:顺序栈和链式栈。    顺序栈:采用顺序存储结构的栈。//顺序栈 public class SeqentialStack&lt;T&gt; { ...

不忘初心的博客 267

0.嵌入式控制器EC实战 Embedded Controller开发概述

文章目录前言1.嵌入式控制器EC概述2.EC芯片框图(IT8502为例)3.General Purpose I/O Port (GPIO)4.SMBus(System Management Bus,系统管理总线)5.PWM、TACH6.KBC(KeyBoard Controller)7.PS/28.ADC(模数转换)总结 前言 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 1.嵌入式控制器EC概述 嵌入式控制器EC是挂在CPU的L

qq_30135687的博客 1万+

NeuDs 数据结构 || 堆栈和队列

通过对堆栈S操作:Push(S,1), Push(S,2), Pop(S), Push(S,3), Pop(S), Pop(S)。若一个栈的输入序列为{1, 2, 3, 4, 5},则不可能得到{3, 4, 1, 2, 5}这样的出栈序列。在一个只包含一个元素的栈中,这个元素即是最后入栈的元素,也是最先入栈的元素,因此它既是栈顶元素,也是栈底元素。在队列中,允许插入的一端通常被称为队尾(rear),允许删除的一端通常被称为队头(front)。栈是一种特殊的线性表,它的插入和删除操作都是在表的同一端进行。

WeFun_Han的博客 1731

用长tree方式做等长线

1)写一个sdc,把等长线的起点设置成clock source,用于创建create_clock,至于period和waveform等参数随便写即可。然后clock_opt -from build_clock -to route_clock即可。3)在正式cts之前或之后,给自己创建的scenario长tree并don't touch。前面讲过了如何用set_data_check做等长线,这里再讲一下如何用cts的方式做。2)为该clock创建一个新mode,并创建对应的scenario。

m0_61544122的博客 622

如何计算 R 中的基尼系数(附示例)

以意大利统计学家Corrado Gini命名,基尼系数是衡量人口收入分配的一种方法。基尼系数的值在 0 到 1 之间,值越高代表收入不平等越大,其中:0代表完全的收入平等(每个人的收入都一样) 1代表完全的收入不平等(一个人拥有所有收入) 您可以在此处找到按国家/地区列出的基尼系数列表。以下示例显示了使用DescTools包中的Gini()函数计算 R 中的基尼系数的两种方法。示例 1:使用个人收入计算基尼系数假设我们有以下 10 个人的年收入列表:收入:5 万美元、5 万美元、7 万美元、7 万美元、7

Mrrunsen的博客 2991

栈的基本操作(链接表示)

栈 栈是一种特殊的线性表,对于他所有的插入和删除都限制在表的同一端进行。表中允许进行插入、删除操作的一端称为栈顶,另一端则叫做栈底。当栈中没有元素的时候,称为空栈。 栈的插入运算通常称为进栈或入栈,栈的删除运算操作通常称为退栈或出栈。 栈的基本操作 //结点 struct node { int x; node* line; }; //结构体链接表示 struct stack_link { ...

WeChat:A15047825994 826

JS逆向-7881游戏平台Lb-Sign参数和Lb-Timestamp参数

本文是该专栏的第79篇,后面会持续分享python爬虫干货知识。本文以7881游戏平台为例,通过JS逆向获取它的lb-sign参数和lb-timestamp参数生成规律。针对lb-sign和lb-timestamp两个参数具体的“逆向”思路逻辑,笔者将在本文进行详细说明,并且将在正文结合“完整代码”来详细介绍。废话不多说,具体细节部分以及详细思路逻辑,跟着笔者直接往下看正文部分。(附带完整代码)

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 1220

k:特殊的线性表—栈

栈(Stack):  栈是一种特殊的线性表,栈中的数据元素以及数据元素之间的逻辑关系和线性表相同,两者之间的差别在于:线性表的插入和删除操作可以在表的任意位置进行,而栈的插入和删除操作只允许在表的尾端进行。其中,允许进行插入和删除操作的一端称为栈顶,另一端称为栈底。通常,将元素插入栈的操作叫做入栈(push),而将元素从栈中进行删除并返回的操作叫做出栈(pop)。栈可以看成是一种受限的特...

diaosangwan0363的博客 570

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

数据结构:设线性表中每个元素有两个数据项k1和k2,现对线性表按一下规则进行排序:先看数据项k1,k1值小的元素在前,大的在后;在k1值相同的情况下,再看k2,k2值小的在前,大的在后。满足这种要求的

题目: 设线性表中每个元素有两个数据项k1和k2,现对线性表按一下规则进行排序:先看数据项k1,k1值小的元素在前,大的在后;在k1值相同的情况下,再看k2,k2值小的在前,大的在后。满足这种要求的排序方法是( ) A.先按k1进行直接插入排序,再按k2进行简单选择排序 B.先按k2进行直接插入排序,再按k1进行简单选择排序 C.先按k1进行简单选择排序,再按k2进行直接插入排序 D.先按k2进行简单选择排序,再按k1进行直接插入排序 答题思路: 首先我们要明确题意,这一题的排序是针对k1和k2全体进

我想喝可乐的博客 8125

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

k:特殊的线性表—队列

队列的概念:  队列是另一种特殊的线性表,它的特殊性体现在其只允许在线性表的一端插入数据元素,在线性表的另一端删除数据元素(一般会采用在线性表的表尾那端(没被head指针所指的那端)插入数据元素,在线性表的表头(被head指针所指的那端)那端删除数据元素,因为按照此种方式进行操作的队列,无论采用的是顺序存储方式的物理结构还是链式存储方式的物理结构,其插入和删除数据元素的时间复杂度为O(1...

diaosangwan0363的博客 442

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数据结构--线性表(数组、链表、栈、队列)

线性表 线性逻辑结构特征: 集合中存在唯一的第一个数据元素、最后一个数据元素,集合中剩余的每个数据元素均有唯一的直接前驱元素和唯一的直接后继元素 线性表的物理实现 数组: 它用一组连续的内存空间,来存储一组具有相同类型的数据。数组的空间是从栈分配的。 数组优点: 简单易用 访问元素快(常数时间) 数组缺点: 大小固定:是静态的(并且要在使用前指定数组大小) 基于位置的插入操作实现复杂(为了内存的连续性,需要搬移数据) 分配一个块:若申请内存空间很大,比如100M,但若内存空间没有100M的连

weixin_43847183的博客 958

第4章栈和队列:栈的基础知识

本章介绍了两种特殊的线性表——栈和队列。栈是后进先出(LIFO)结构,只能在栈顶进行插入(push)和删除(pop)操作,其出栈序列个数为第n个卡特兰数(1/(n+1))C(2n,n)。通过示例展示了栈的操作特性,如入栈顺序1,2,3可能产生3,2,1或1,3,2等不同出栈序列。典型例题分析验证了栈的基本性质,如当第一个出栈元素为n时,后续出栈元素必为n-i+1。这些受限操作的线性表结构为特定场景提供了高效的解决方案。

计算机科学、人工智能、数据分析和大数据方向的研发和教学。 1222

线性表(顺序表、链表、栈、队列、特殊数组)

常考的线性表相关代码(C语言),包含顺序表、链表、栈、队列、特殊数组(主要指三元组)。不包含串,通常串不考代码

weixin_52323547的博客 533

初谈线性表

The Art of Computer Programming

qq_37407968的博客 802

动态数组+线性表与栈的实现+栈的应用

数据结构与算法: 数据结构:相互之间存在一种或多种特定关系的数据元素的集合(数据不仅仅包含数据类型) 但凡有数据"扎堆"的地方,就有数据结构的影子 但凡有数据结构的地方,脱离不了算法的"折磨" 程序 = 数据结构 + 算法 数据结构主要学习的是什么: 数据之间的关系,将离散的数据规整划一 如何将这个关系具体实现存储到计算机中 基于关系之上对数据的具体操作,增删改查 数据结构的具体使用场景 逻辑结构 数据之间的关系–逻辑结构(3种) 线性结构(数据元素之间是1对1 的关系) 树状结构(数据元素之间存

weixin_45984258的博客 449

k:特殊的线性表—队列

队列的概念:队列是另一种特殊的线性表,它的特殊性体现在其只允许在线性表的一端插入数据元素,在线性表的另一端删除数据元素(一般会采用在线性表的表尾那端(没被head指针所指的那端)插入数据元素,在线性表的表头(被head指针所指的那端)那端删除数据元素,因为按照此种方式进行操作的队列,无论采用的是顺序存储方式的物理结构还是链式存储方式的物理结构,其插入和删除数据元素的时间复杂度为O(1))。所以队列是

MyStringIsNotNull的博客 523

数据结构应试要点——线性表、栈和队列、串

线性表的基础知识请参阅相关书籍,这里列出考试时需要注意或容易忽视的地方。如有补充,欢迎评论或私信! 1.线性表的顺序存储结构是一种随机存取的存储结构,而非顺序存取。 随机存取就是当存储器中的数据被读取或写入时,所需要的时间与该数据所在的物理地址无关。更通俗地说,根据起始地址加上元素的序号,可以很方便地访问任意一个元素。 顺序存取是按记录的逻辑顺序进行读、写操作的存取方法。它的主要特点是在存取第N个数据时,必须先访问前(N-1)个数据。典型实例是链表。 2. ...

x568059888的博客 1308

线性表概述

[size=x-small]线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。[/size] 在实际应用中,[b][color=red]线性表都是以栈、队列、字符串、数组等特殊线性表的形式...

wxg6203的专栏 163

数据结构线性表之栈与队列

本文主要介绍线性表下的栈与队列的基本概念以及相关代码(C语言版)。附加栈与队列在线OJ习题的练习。

fjhugjkdsd的博客 672

数据结构——(1)线性表

目录 一、什么是线性表 二、线性表有哪些种类 三、线性表的实现 1.用数组实现的线性表 2.用链表(双向链表)实现的线性表 一、什么是线性表 线性表:由同种数据类型的数据元素组成的有序序列。 说人话:将有一堆同样类型的数据按顺序放在一起的数据结构。 举例子:现在我有英语书(序号0)、语文书(序号1)和数学书(序号2);现在我想把他们按语文书、数学书、英语书的顺序放成一叠,那么用序号...

weixin_41698305的博客 6312
上一篇: K:线性表的实现—链表
下一篇: Q:关于栈的常见问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值