1、栈的基本概念

栈是一种数据结构,它代表只能在某一段进行插入、删除操作的特殊线性表,通常就是在线性表的末端进行插入、删除操作。

归纳起来就是:栈就是一种后进先出的线性表

2、栈提供的基本方法

栈不允许提供从中间任意位置访问元素的方法,栈只允许在栈顶插入、删除元素

初始化:通常是一个构造器,用于创建一个空栈

返回栈的长度、入栈、出栈、访问栈顶元素、判断栈是否为空、清空栈

3、顺序栈的实现和方法实现

顺序栈利用一组地址连续的存储单元依次存放从栈底到栈顶的数据元素。栈底位置固定不变,它的顶栈元素可以直接通过栈底层数组的元素访问ar[size-1]。

进栈:只需将新的数据元素存入栈内,然后再记录栈内元素个数的变量+1,程序即可再次通过arr【size-1】重新访问新的栈顶元素。

出栈:让记录栈内元素个数的变量减1;释放数组对栈顶元素的引用。

4、链式栈的实现和方法实现

栈顶元素不断改变,程序只要使用一个top引用来记录当前的栈顶元素,top引用变量永远引用栈顶元素,再使用一个size变量记录当前栈中包含多少元素即可。

进栈:让top引用指向新添加的元素,新元素的next引用指向原来的栈顶元素。让记录栈内元素个数size变量+1.

出栈:让top引用指向原栈顶元素的下一个元素,并释放原来的栈顶元素。

5、Java集合框架提供的栈

java.utill.Stack:它就是一个普通的顺序栈,底层基于数组实现,线性安全,在多线程环境下可安心使用

java.util.LinkedList:LinkedList是一个双向链表,但它提供了push(),pop(),peek()等方法,这表明LInkedList可以但成栈来使用。但是线性不安全,如果在多线程环境下使用,应该使用Collections类将其改造成线性安全。

6、队列的基本概念

队列是一种被限制的线性表,它使用固定的一段来插入数据,另一端来删除数据,也就是说,队列中元素的移动方向是固定的。

队列是一种特殊的线性表,它只允许在表的前端进行删除操作,在表的后端进行插入操作,进行插入的端称为队尾,进行删除的端称为对头。

7、队列提供的基本方法

初始化:通常是一个构造器,用于创建一个空队列

返回队列的长队:返回队列中数组元素的长度

加入元素:向队列的rear端插入一个数据元素,队列长度+1

删除元素:从队列的front端删除一个数据元素,队列长度-1,返回被删除的元素

访问队列的前端元素:

判断队列的前端元素是否为空

清空队列

8、顺序队列的实现和方法实现

系统采用一组地址连续的存储单元存放队列从rear到front端的所有数据元素,程序只需front和rear俩个整形变量来记录front端的元素索引、rear端的元素索引。对于顺序队列而言,队列底层将采用数组来保存队列元素,每个队列元素在数组中的位置是固定不变的,变的只是rear和front整形变量。当r元素进入队列时,rear值+1,当有元素从队列中移除时,front变量+1.

对于链栈而言,栈内包含几个元素,底层链式结构只需保存几个节点,每个节点需要添加一个next引用,这会引起部分空间的浪费。对于顺序栈来说,程序开始就需要开辟一块连续的内存。从空间利用率来看,链栈的空间利用率比顺序栈的空间利用率更高一些。

9、循环队列

为了重新利用顺序队列底层数组中已删除元素所占用的空间,消除可能出现的“假满”现象,可将顺序队列改为循环队列,循环队列是首位相连的队列;当front、rear变量达到底层数组的capacity-1之后,再前进一位自动变成0.

对于front==rear这种情况,如果底层数组为null,表明队列为空,否则为满。

10、链式队列的实现和方法实现

采用链式存储结构的队列也被称为链队列,对于链队列而言,由于程序需要从rear端添加元素,从front端移除元素,因此考虑对链队列增加front、rear俩个引用变量,使它们分别指向链队的头、尾俩个节点

11、Java集合框架提供的队列

Java提供的Queue接口代表一个队列。其包含6个方法用于队列的插入移除和访问

12、双向队列(deque)

两端同时进行插入和删除操作。

程序员基本功10栈和队列相关推荐

  1. 代码随想录【day 10 栈与队列】| 232.用栈实现队列、 225. 用队列实现栈

    代码随想录[day 10 栈与队列]| 232.用栈实现队列. 225. 用队列实现栈 理论基础 LeetCode 232.用栈实现队列 题目链接:232.用栈实现队列 卡哥文解 视频讲解 解题思路( ...

  2. 给程序员的10条建议,句句经典

    web前端教程 用大白话,来讲编程 查看全文 http://www.taodudu.cc/news/show-1159917.html 相关文章: 都说程序员是吃青春饭! 世界上最好用的浏览器Chro ...

  3. 第 14 章 程序员常用 10 种算法

    第 14 章 程序员常用 10 种算法 1.二分查找算法 1.1.二分查找算法介绍 前面我们讲过了二分查找算法,是使用递归的方式,下面我们讲解二分查找算法的非递归方式 二分查找法只适用于从有序的数列中 ...

  4. 程序员中前10%,我认识的这些老司机是怎么突破年薪百万

    随着这两年,社交圈的扩大,也让我逐渐认识到了越来越多的年薪百万的资深程序员,也刷新了我过去无知的认知.他们其实非常低调,鲜有对外吹嘘自己收入,一直兢兢业业的在技术上驰骋人生,当然,这样的人已经是程序员 ...

  5. Android 程序员的技术栈大全

    AndroidAll 项目地址:chiclaim/AndroidAll  简介: Android 程序员的技术栈大全 更多:作者   提 Bug 标签: 内容涵盖绝大部分 Android 程序员所需要 ...

  6. 成为明星程序员的10个提示

    原文地址是:点击打开链接 Andrew C. Oliver是Open Software Integrators公司的总裁与创始人,公司主要与一些开源公司合作,特别是那些初创公司,致力于为客户提供课程开 ...

  7. 成为优秀高级程序员的10个要点

     成为优秀高级程序员的10个要点 What 软件工程师的职业生涯要历经以下几个阶段:初级.中级,最后才是高级.这篇文章主要是讲如何通过10个步骤助你成为一名高级软件工程师. Why 得到更多的报酬 ...

  8. 一位程序员工作10年总结的13个忠告

    一位程序员工作10年总结的13个忠告 展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告. 走过的路,回忆起来是那么曲折,把自己的一些心得体会分享给程序员兄弟姐妹们,虽然时代 ...

  9. [置顶] 完美程序员的10种品质

    完美程序员的10种品质 转载自:http://zhousir.net/ 谁是完美程序员?著名博客作家Alex Iskold在<明星软件工程师的10种特质>一文中给出这个问题的答案: 1. ...

最新文章

  1. 用C#编写ActiveX控件(三) 转载
  2. 给ADAS泼冷水?不,是客观评价
  3. centos 6.5 启动时卡在进度条位置无法进入系统解决办法。
  4. zookeeper集群配置说明以及window单台机器集群搭建
  5. git clone时出现 error:inflate:data stream error(incorrect data check)
  6. Linux ubuntu安装搜狗输入法
  7. Machine Learning Mastery 博客文章翻译:XGBoost
  8. #python练习实例0:制作1-100随机抽取3个数字排队列
  9. java list map 去重和排序方法
  10. python读取txt文件存储数组_python – 从文本文件中将数据读入numpy数组
  11. 如何编程实现iAMT无线功能的禁用和开启
  12. Visual Studio 2019下用 C# 实现 Hill2 二阶希尔密码 的加密、解密 GUI界面
  13. 新软件--AutoReply(自动回复),还能自动接听,做答录机
  14. 四旋翼无人机飞控系统设计(方案篇)
  15. Intel CPU发展史
  16. jsp:setProperty的用法
  17. [数论][高精度]Heaven Cow与God Bull
  18. 谈谈我对普通莫队和带修莫队的拙见
  19. 白杨SEO:流量红利消失,现在都在各渠道做推广,我们还有必要做官方网站吗?怎么做呢?
  20. NVIDIA,怎么查看显卡

热门文章

  1. php chmod 777 chown,linux命令中chown与chmod的区别
  2. jquery导入数据_Web技术——简单的数据库编程
  3. python数据库连接类写其他类调用报超时_python面向对象,类,以及连接数据库
  4. linkhashmap原理_LinkedHashMap原理
  5. 嵌入式开发中,用C++真香!
  6. linux测试dvi接口,Pro Capture-DVI 2路高清DVI采集卡 支持Linux系统更专业
  7. 科学家利用计算机模型,科学家尝试利用计算机模拟整个宇宙的演化
  8. java弃用标签_Java 9 揭秘(15. 增强的弃用注解)
  9. Sql Server中实现Mysql中的group_concat函数效果
  10. ASP.NET里创建Microsoft Word文档