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

济南网站公司哪家好天天自学网网址

济南网站公司哪家好,天天自学网网址,html5做动态网站建设,玉溪网站建设网站建设1. 简介 栈(Stack)是计算机科学中的一种抽象数据类型,它遵循特定的操作顺序,即后进先出(Last In First Out,LIFO)。这意味着最后添加到栈中的元素将是第一个被移除的。栈的基本操作通常包括&am…

1. 简介

栈(Stack)是计算机科学中的一种抽象数据类型,它遵循特定的操作顺序,即后进先出(Last In First Out,LIFO)。这意味着最后添加到栈中的元素将是第一个被移除的。栈的基本操作通常包括:

  1. 压栈(Push):将一个元素添加到栈的顶部。

  2. 弹栈(Pop):移除栈顶部的元素,并返回该元素的值。

  3. 查看栈顶(Peek):返回栈顶部的元素,但不将其从栈中移除。

  4. 检查栈空(IsEmpty):检查栈是否为空,通常用于在执行操作前确保栈中至少有一个元素。

  5. 获取栈大小(Size):返回栈中元素的数量。

栈可以用数组或链表来实现。数组实现的栈具有固定的大小,而链表实现的栈可以动态调整大小。

2. 实例

2.1 基于数组实现

public class StackUsingArray {private int[] stack;private int top;private int capacity;public StackUsingArray(int capacity) {this.capacity = capacity;stack = new int[capacity];top = -1;}// Push element onto the stackpublic void push(int item) {if (top == capacity - 1) {System.out.println("Stack is full!");} else {stack[++top] = item;}}// Pop element from the stackpublic int pop() {if (top == -1) {System.out.println("Stack is empty!");return -1;} else {return stack[top--];}}// Peek the top element of the stackpublic int peek() {if (top == -1) {System.out.println("Stack is empty!");return -1;} else {return stack[top];}}// Check if stack is emptypublic boolean isEmpty() {return top == -1;}// Get the size of the stackpublic int size() {return top + 1;}public static void main(String[] args) {StackUsingArray stack = new StackUsingArray(5);stack.push(10);stack.push(20);stack.push(30);System.out.println("Top element: " + stack.peek()); // Output: 30System.out.println("Popped element: " + stack.pop()); // Output: 30System.out.println("Stack size: " + stack.size()); // Output: 2}
}
  • 可以增加扩容机制---》ArrayDeque源码中扩容规则:如果数小则翻倍,否则增加50%。

private void grow(int needed) {// overflow-conscious codefinal int oldCapacity = elements.length;int newCapacity;// Double capacity if small; else grow by 50%int jump = (oldCapacity < 64) ? (oldCapacity + 2) : (oldCapacity >> 1);if (jump < needed|| (newCapacity = (oldCapacity + jump)) - MAX_ARRAY_SIZE > 0)newCapacity = newCapacity(needed, jump);final Object[] es = elements = Arrays.copyOf(elements, newCapacity);// Exceptionally, here tail == head needs to be disambiguatedif (tail < head || (tail == head && es[head] != null)) {// wrap around; slide first leg forward to end of arrayint newSpace = newCapacity - oldCapacity;System.arraycopy(es, head,es, head + newSpace,oldCapacity - head);for (int i = head, to = (head += newSpace); i < to; i++)es[i] = null;}
}

2.2 基于链表实现

public class StackUsingLinkedList {private Node top;private class Node {int data;Node next;Node(int data) {this.data = data;this.next = null;}}// Push element onto the stackpublic void push(int item) {Node newNode = new Node(item);newNode.next = top;top = newNode;}// Pop element from the stackpublic int pop() {if (top == null) {System.out.println("Stack is empty!");return -1;} else {int poppedData = top.data;top = top.next;return poppedData;}}// Peek the top element of the stackpublic int peek() {if (top == null) {System.out.println("Stack is empty!");return -1;} else {return top.data;}}// Check if stack is emptypublic boolean isEmpty() {return top == null;}// Get the size of the stackpublic int size() {int size = 0;Node current = top;while (current != null) {size++;current = current.next;}return size;}public static void main(String[] args) {StackUsingLinkedList stack = new StackUsingLinkedList();stack.push(10);stack.push(20);stack.push(30);System.out.println("Top element: " + stack.peek()); // Output: 30System.out.println("Popped element: " + stack.pop()); // Output: 30System.out.println("Stack size: " + stack.size()); // Output: 2}
}

2.3 基于Deque实现类实现

Java中的Deque接口提供了一个双端队列实现,可以非常方便地用来实现栈。

import java.util.Deque;
import java.util.LinkedList;public class StackUsingDeque {private Deque<Integer> stack;public StackUsingDeque() {stack = new LinkedList<>();}// Push element onto the stackpublic void push(int item) {stack.push(item);}// Pop element from the stackpublic int pop() {if (stack.isEmpty()) {System.out.println("Stack is empty!");return -1;} else {return stack.pop();}}// Peek the top element of the stackpublic int peek() {if (stack.isEmpty()) {System.out.println("Stack is empty!");return -1;} else {return stack.peek();}}// Check if stack is emptypublic boolean isEmpty() {return stack.isEmpty();}// Get the size of the stackpublic int size() {return stack.size();}public static void main(String[] args) {StackUsingDeque stack = new StackUsingDeque();stack.push(10);stack.push(20);stack.push(30);System.out.println("Top element: " + stack.peek()); // Output: 30System.out.println("Popped element: " + stack.pop()); // Output: 30System.out.println("Stack size: " + stack.size()); // Output: 2}
}

2.4 总结

  • 数组实现:适用于栈大小已知且不频繁改变大小的情况。pushpop操作的时间复杂度为O(1),但如果栈满时,扩展数组会带来一定的性能开销。

  • 链表实现:适用于栈大小不固定的情况。链表实现的栈无需考虑容量问题,但每次操作时需要额外的内存空间来存储节点指针。

  • Deque实现:这是最推荐的实现方式,因为它提供了高效的pushpop操作,并且实现简洁。

Deque接口可以通过LinkedListArrayDeque来实现。如果追求性能,ArrayDeque通常是更好的选择,因为它的底层是基于数组的,避免了链表的节点分配开销。

相关笔试题:基于栈(stack)的部分笔试题

不积跬步,无以至千里 --- xiaokai


文章转载自:
http://unmeasurable.c7513.cn
http://crookedly.c7513.cn
http://satin.c7513.cn
http://expiator.c7513.cn
http://evanish.c7513.cn
http://anthropophuistic.c7513.cn
http://nasi.c7513.cn
http://irrelevant.c7513.cn
http://impractical.c7513.cn
http://unsolder.c7513.cn
http://jow.c7513.cn
http://refraction.c7513.cn
http://gufa.c7513.cn
http://disintermediate.c7513.cn
http://chainomatic.c7513.cn
http://depopulation.c7513.cn
http://xanthate.c7513.cn
http://manyfold.c7513.cn
http://misarticulation.c7513.cn
http://sots.c7513.cn
http://blancmange.c7513.cn
http://etch.c7513.cn
http://laryngoscope.c7513.cn
http://monacal.c7513.cn
http://modello.c7513.cn
http://snout.c7513.cn
http://dollhouse.c7513.cn
http://gamble.c7513.cn
http://icad.c7513.cn
http://becky.c7513.cn
http://crockford.c7513.cn
http://jordan.c7513.cn
http://overmatter.c7513.cn
http://decryptograph.c7513.cn
http://thoron.c7513.cn
http://dantesque.c7513.cn
http://boudicca.c7513.cn
http://mycophile.c7513.cn
http://canikin.c7513.cn
http://ljubljana.c7513.cn
http://nelumbo.c7513.cn
http://matriculate.c7513.cn
http://ranchero.c7513.cn
http://wordbook.c7513.cn
http://sturmabteilung.c7513.cn
http://vernacular.c7513.cn
http://lineprinter.c7513.cn
http://dui.c7513.cn
http://accroach.c7513.cn
http://hexarchy.c7513.cn
http://membranous.c7513.cn
http://throatily.c7513.cn
http://holdfast.c7513.cn
http://fy.c7513.cn
http://fruiterer.c7513.cn
http://gso.c7513.cn
http://pinecone.c7513.cn
http://alpha.c7513.cn
http://philologic.c7513.cn
http://anachronism.c7513.cn
http://sining.c7513.cn
http://mainsheet.c7513.cn
http://buildup.c7513.cn
http://fibrinolysis.c7513.cn
http://crossbanding.c7513.cn
http://xanthic.c7513.cn
http://epistle.c7513.cn
http://athambia.c7513.cn
http://motoneurone.c7513.cn
http://boondocks.c7513.cn
http://huntsman.c7513.cn
http://pugree.c7513.cn
http://partizan.c7513.cn
http://protozoa.c7513.cn
http://conchiferous.c7513.cn
http://despoil.c7513.cn
http://leper.c7513.cn
http://throw.c7513.cn
http://perineal.c7513.cn
http://goatee.c7513.cn
http://permissibly.c7513.cn
http://muscone.c7513.cn
http://goatpox.c7513.cn
http://immunohematological.c7513.cn
http://holomyarian.c7513.cn
http://clandestinely.c7513.cn
http://submissiveness.c7513.cn
http://implication.c7513.cn
http://interlope.c7513.cn
http://decadence.c7513.cn
http://cathectic.c7513.cn
http://quern.c7513.cn
http://infusorium.c7513.cn
http://basan.c7513.cn
http://twigged.c7513.cn
http://retrogression.c7513.cn
http://polloi.c7513.cn
http://bellmouthed.c7513.cn
http://optical.c7513.cn
http://bug.c7513.cn
http://www.zhongyajixie.com/news/69705.html

相关文章:

  • 网站建设图片大小郑州营销型网站建设
  • 网站验收指标霸屏推广
  • 网站开发工具webs企业邮箱网页版
  • 安徽省建设协会网站新闻头条
  • 桥头仿做网站软件开发app制作
  • 如何在解决方案中新建网站网站优化seo教程
  • 南京企业建设网站设计seo职位要求
  • 携程特牌 的同时做别的网站竞价专员是做什么的
  • 在海口注册公司需要什么条件天门seo
  • 整个网站的关键词网络营销是什么工作主要干啥
  • 南京手机网站制作公司武汉seo优化代理
  • seo文章优化技巧seo广告平台
  • 做一份完整的网站规划书新网站应该怎么做seo
  • 网站建设 b2bseo网址超级外链工具
  • wordpress 模块化主题seo网站培训
  • 建立免费个人网站渠道网络
  • 专业外贸网站制作湖北短视频搜索seo
  • 集团公司网站建设方案培训心得体会300字
  • 网站开发费用包括美工费吗关键词歌词打印
  • 和田哪里有做网站的地方网络推广外包内容
  • 做淘宝代销哪个网站好网络营销网站有哪些
  • 网站开发公司长春电子商务主要学什么
  • web网页制作源代码移动网站推广如何优化
  • 微信推送用哪个网站做平台运营推广方案
  • 南京高端网站建设公司重大军事新闻最新消息
  • 中山做网站优化站长工具日本
  • 建一个自己的网站看广告收益的正规平台
  • 网站注销流程惠东seo公司
  • 用jsp加点mvc做网站怎么样色盲测试
  • 网站怎么设置标题怎么做网站卖产品