当前位置: 首页 > news >正文

国内最新新闻摘抄2023年志鸿优化设计电子版

国内最新新闻摘抄2023年,志鸿优化设计电子版,搜索引擎优化是什么?,怎么做电商网站一、前言 之前我们已经学习了链表的所有操作及其时间复杂度分析,我们可以了解到对于链表头的相关操作基本都是O(1)的,例如链表头增加、删除元素,查询元素等等。那我们其实有一个数据结构其实可以完美利用到这些操作的特点,都是在…

一、前言

之前我们已经学习了链表的所有操作及其时间复杂度分析,我们可以了解到对于链表头的相关操作基本都是O(1)的,例如链表头增加、删除元素,查询元素等等那我们其实有一个数据结构其实可以完美利用到这些操作的特点,都是在某一段进行操作,那就是栈。本章我们通过链表去实现栈。并且比较用数组实现和用链表实现他们之间的差异。

二、用链表实现栈

2.1、代码实现

那么通过链表实现栈就很简单了,我们知道入栈和出栈都是从链表的同一端进行操作,那么我们只需调用链表的addFirst/removeFirst的方法即可,查找同理。
首先我们将链表栈命名为LinkedListStack,并且实现我们Stack的抽象类,然后设置一个内部属性为我们之前实现的链表,通过该链表完成实现需要重写的方法即可,代码如下:

public class LinkedListStack<T> implements Stack<T> {private LinkedList<T> linkedList;public LinkedListStack() {this.linkedList = new LinkedList<>();}@Overridepublic int getSize() {return linkedList.getSize();}@Overridepublic boolean isEmpty() {return linkedList.isEmpty();}@Overridepublic void push(T t) {linkedList.addFirst(t);}@Overridepublic T pop() {return linkedList.removeFirst();}@Overridepublic T peek() {return linkedList.getFirst();}@Overridepublic String toString() {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("Stack: top ");stringBuilder.append(linkedList);return stringBuilder.toString();}
}

测试一下:

public static void main(String[] args) {LinkedListStack<Integer> integerArrayStack = new LinkedListStack<>();for (int i = 0; i < 5; i++) {integerArrayStack.push(i);System.out.println(integerArrayStack);}integerArrayStack.pop();System.out.println(integerArrayStack);}

结果没有问题,通过链表实现栈就这样简单的实现了。
在这里插入图片描述

2.2、和数组栈比较性能

这个代码和之前数组队列和循环队列效率的对比很接近:

public class TestStackCompare {private static double testQueue(Stack<Integer> s, int opCount){long startTime = System.currentTimeMillis();Random random = new Random();for (int i = 0; i < opCount; i++) {s.push(random.nextInt(Integer.MAX_VALUE));}for (int i = 0; i < opCount; i++) {s.pop();}long endTime = System.currentTimeMillis();return (endTime - startTime)/1000.0;}public static void main(String[] args) {ArrayStack<Integer> integerArrayStack = new ArrayStack<>();LinkedListStack<Integer> integerLinkedListStack = new LinkedListStack<>();System.out.println("arrayStack,time:"+testQueue(integerArrayStack,1000000)+"s");System.out.println("linkedListStack,time:"+testQueue(integerLinkedListStack,1000000)+"s");}
}

那么我们运行下,发现两者效率近乎一致:
在这里插入图片描述
当然也有可能得到的结果是有差距的,对于arrayStack来说,时不时就需要扩容,这个对于某些操作系统来说比较耗费时间,而对于linkedListStack来说,它每次new Node就需要不断的开辟空间,这个操作又对于某些操作系统来说更耗费时间;而且这两者的差距会随着操作次数的增多不断拉大,因为扩容并不是每次扩容,而new Node确实是需要每次都new一个,例如我将操作次数放大为10000000次,这个时候两者的时间差距就比较大了:
在这里插入图片描述

所以仍然取决于你测试使用的操作系统,配置,jvm版本等等。但是其实我想强调的是,对于数组栈和链表栈来说,他们的各项操作的时间复杂度其实是一致的。他们之间没有复杂度之间的巨大差异。不像数组队列和循环队列,一个6s,一个0.01s,这之间的差距是非常大的。

http://www.yidumall.com/news/33197.html

相关文章:

  • wordpress自定义分类seo工作流程
  • 网站摇奖活动怎么做吉林seo关键词
  • 企业网站备个人网站品牌推广公司
  • 什么后台做网站安全东莞网站排名提升
  • 网站 动态 标签页近两年成功的网络营销案例
  • 金科科技 做网站国外外链平台
  • 阿里云网站建设需要多少钱怎么接app推广的单子
  • 泉州做网站需要多少钱seo文章范文
  • 百度不做网站外链是什么原因天天外链
  • 服务好的赣州网站建设vue seo 优化方案
  • 深圳社保个人网页sem 优化价格
  • 昌吉住房和城乡建设局网站重庆百度关键词推广
  • 做淘宝客网站骗钱公司网站建站要多少钱
  • 网站改版影响排名seo优化报价
  • 做电子商务网站公司百度推广渠道户
  • 平面设计的软件都有什么夫唯seo怎么样
  • 网站怎么做分页必应搜索引擎入口
  • 做二手手机交易网站2022年五月份热点事件
  • 网上下的网站模版后门seo关键词推广优化
  • 修改公司网站搜索引擎优化的含义和目标
  • 云南省中国建设工程造价管理协会网站免费的大数据分析平台
  • 有哪些做的很漂亮的网站广告联盟平台自动赚钱
  • 咨询公司ppt重庆seo排名方法
  • 做网站需要了解的内容图片外链在线生成网址
  • wordpress 问号热狗seo顾问
  • 快速开发网站网推软件有哪些
  • 临沂网站制作培训大连网站开发公司
  • 工程建设招标中心网站阿里巴巴友情链接怎么设置
  • 国内有哪些做卡通素材的网站长沙网站seo
  • 建电子商务网站费用做网络推广有前途吗