首页 > 其他分享 >Princeton Algorithms, Part I week2 stack&queue

Princeton Algorithms, Part I week2 stack&queue

时间:2023-11-03 17:55:41浏览次数:26  
标签:capacity String Princeton implementation stack queue Part array public

stack:先进后出

queue:先进先出

首先是stack 有两种实现方式,第一种是用链表,第二种是用数组。

Stack: linked-list representation

 

 

 

stack: array implementation

 

 上面这个实现是固定长度的array implementation

非常不方便,所以引入可变长度的实现

resizing-array implementation

那么以什么方式去可变呢?不能每次都capacity满了就加1,或者少了就减1,这种方式代价太大

 正确的方式是当array满了以后,直接将数组的长度翻倍。

 原因是

 那么在缩减的时候该怎么缩减呢?

应该在当前array的1/4长度的时候再缩减而不是在1/2的时候,因为有一种极端情况就是,比如一共有8的长度,现在里面只有5个元素,pop出去一个,那么就需要缩减,然后又push进去,又要扩回8个,每次操作都是要访问N个元素 并且 赋值N个。下面是 java implementation

 1 public class ResizingCapacityStackofString{
 2 
 3            private String [] s;
 4            private int N = 0;
 5            public ResizingCapacityStackofString(){
 6 
 7                    s = new String[1];
 8 
 9   }
10            public ResizingCapacityStackofString(int capacity){
11 
12                    s = new String[capacity];
13 
14   }
15          public boolean isEmpty(){
16                return N == 0;
17 
18 }
19          public void push(String item){
20               if(N == s.length){resize(s.length * 2);}
21               s[N++] = item;
22 
23 }
24          private void resize(int capacity){
25                  String[] newArr = new string[capacity];
26                  for(int i =0;i <N;i++){
27                      newArr[i] = s[i];
28 }
29                  s = newArr;
30 }
31          public String pop(){
32                 Strting item = s[N--];
33                 if(N <= 1/4 * s.length){resize(s.length/2);}
34                 return item;
35                 
36 
37 
38 }
39 
40 
41 }

 

标签:capacity,String,Princeton,implementation,stack,queue,Part,array,public
From: https://www.cnblogs.com/easyjiang/p/17808111.html

相关文章

  • CF1868B2 Candy Party (Hard Version) 题解
    Problem-1868B2-CodeforcesCandyParty(HardVersion)-洛谷相信大家已经看过SimpleVersion,这题和上题不同之处就在于如果\(b_i=2^x\),他可以被分解成\(2^x\)或\(2^{x+1}-2^x\),我们不妨起初固定一种方案,如果不满足条件后再把一部分换回去。我们强制钦定起......
  • 从零开始构建报警中心:part0前言架构
    一般来说,对于小规模或者业务较为简单项目,使用zabbix进行监控监控服务器状态,并配置一些报警渠道就可以基本满足需求,但是如果项目分化较多,各个业务间相互独立,对报警时效性要求各不相同的情况下,仅靠原生的zabbix报警是不够的。针对这种请求其实可以供借鉴的系统有很多,之所以想起写这么......
  • CF1868B1 Candy Party (Easy Version) 题解
    Problem-1868B1-CodeforcesCandyParty(EasyVersion)-洛谷喵喵题。首先每个数最终肯定变成\(\overlinea\),如果\(\overlinea\)不是整数显然无解。然后记\(b_i=a_i-\overlinea\)表示每个数的偏差量,那\(b_i\)要满足能写成\(2^x-2^y\)的形式然后只需要......
  • MIT 6.828 Lab1 Part1
    Part1:PCBootstrap​ 第一个练习的目的是向你介绍x86汇编语言和PC启动过程,并让你开始使用QEMU和QEMU/GDB调试。在这部分实验中,你不必编写任何代码,但为了加深理解,你还是应该做一遍,并准备好回答下面的问题。x86汇编入门​ 如果您还不熟悉x86汇编语言,那么在本课程中......
  • REMOVE PARTITIONING
    本文档介绍了删除分区表的分区结构,并转化成单表,且不丢失数据的方法。语法ALTERTABLE...REMOVEPARTITIONING命令用于删除分区和子分区表的分区结构,并转化成单表,且不丢失数据: ALTERTABLEtable_nameREMOVEPARTITIONING示例删除sales_range_list表中所有的分区结构:......
  • odoo pdf 打印任务后台运行,pdf保存在附件中, 借助queue_job模块实现后台打印
    用户故事:在打印大批量pdf文件时会有较长事件的等待,而且容易中断原因中断原因,有内存及超时限制,wkhtmltopdf工具比较吃内存解决方案:内存限制的问题可以分批处理,比如每次只处理50条记录代码示例,使用按钮触发的打印功能:#model:[email protected]......
  • C#.NET使用multipart/form-data方式上传文件及参数
    publicstaticstringUploadPeopleFaceRequest(AddVisitorRequestDtoaddVisitorRequestDto){try{stringurl=_faceIp+"/fastgate/visitor";Dictionary<string,object>parameters=newDictionary<string,object>......
  • BlockingQueue---SynchronousQueue
    概述A{@linkplainBlockingQueueblockingqueue}inwhicheachinsertoperationmustwaitforacorrespondingremoveoperationbyanotherthread,andviceversa.Asynchronousqueuedoesnothaveanyinternalcapacity,notevenacapacityofone.......
  • cf353D. Queue(整体考虑转移)
    D.Queuef[i]表示第i个F需要多少时间才能让所有的M都移到她后面,那么我们考虑转移,分为两种情况。第i个F和第i-1个F挨着,那么显然f[i]=f[i-1]+1假如中间隔着一些M,可以分为两种情况,假如i可以在i-1完成之前追上它,那么就是f[i-1]+1,否则就说明i一直在进行交换,时间为在i之前的M的个数......
  • C++---数据结构---队列(queue)
    queue容器queue基本概念概念:Queue是一种先进先出(FirstInFirstOut,FIFO)的数据结构,它有两个出口队列容器允许从一端新增元素,从另一端移除元素队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为队列中进数据称为—入队push队列中出数据称为—出队popque......