第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

數(shù)據(jù)結(jié)構(gòu)和算法(五)棧

標(biāo)簽:
算法

一、什么是栈

1.先进后出,后进先出,这就是典型的"栈"结构。

2.从栈的操作特性来看,栈是一种“操作受限”的线性表,只允许在端插入和删除数据。

二、为什么需要栈

  1. 栈是一种操作受限的数据结构,其操作特性用数组和链表均可实现。

  2. 但是,任何数据结构都是对特定应用场景的抽象,数组和链表虽然用起来更加灵活,但却暴露了几乎所有的操作,难免会引起错误操作的风险。

  3. 所以,当某个数据集合只涉及某端插入和删除数据,且满足后进者先出,先进者后出的操作特性时,我们应该首选栈这种数据结构。

三、栈的实现

1.栈的API

public class Stack<Item> {}

2.数组实现(自动扩容)

 时间复杂度分析:根据复杂度的定义,可以得数组实现(自动扩容)符合大多数情况是O(1)级别复杂度,个别情况是

O(n)级别复杂度,比如自动扩容时,会进行完整的拷贝。

空间复杂度分析:在出栈入栈的过程中,只需要一两个临时变量存储空间,所以O(1)级别。我们说空间复杂度的时候,是指除了原本的数据存储空间外,算法运行还需要的额外存储空间。

3.链表实现

时间复杂度分析:

压栈和弹栈的时间都是O(1),因为只需要改变单个节点的索引即可。

空间复杂度分析:在出栈入栈 的过程中,只需要一两个临时变量存储空间,所以O(1)级别。我们说空间复杂度的时候,是指除了原本的数据存储空间外,算法运行还需要的额外存储空间。

四、栈的应用

1.栈在函数调用的应用

栈在表达式求值中的应用(比如:34+13*9+44-12/3)

利用两个栈,其中一个用来保存操作数,另一个用来保存运算符。我们从左向右便利表达式,当遇到数字,我们就直接压入操作数栈,;当遇到运算符号,就与运算栈的栈顶元素进行比较,若比运算符栈顶元素优先级高,就将当前运算符压入栈,若比运算符栈顶的栈顶元素优先级低或相同,从运算符栈中取出栈顶运算符,从操作数栈顶取出2个操作数,然后进行计算,把计算完的结果压入操作数栈,继续比较。

3.栈在操作符号中的比较(比如:{}{[()]()})

4.如何实现浏览器的前进后退功能。

依次将浏览器的url跳转顺序入栈出栈即可.




點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
JAVA開發(fā)工程師
手記
粉絲
7
獲贊與收藏
12

關(guān)注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消