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

苏州诗华洛网站建设中国林业建设协会网站

苏州诗华洛网站建设,中国林业建设协会网站,开发网站有什么用,什么样的网站好优化目录 Day 14#xff1a;栈 一、栈的基本知识 二、栈的方法 1. 顺序表实现栈 2. 入栈 3. 出栈 三、代码及测试 拓展#xff1a; 小结 Day 14#xff1a;栈 Task#xff1a; push 和 pop 均只能在栈顶操作.没有循环, 时间复杂度为 O(1). 一、栈的基本知识 详细的介…目录 Day 14栈 一、栈的基本知识 二、栈的方法 1. 顺序表实现栈 2. 入栈 3. 出栈  三、代码及测试 拓展 小结  Day 14栈 Task push 和 pop 均只能在栈顶操作.没有循环, 时间复杂度为 O(1). 一、栈的基本知识 详细的介绍可以参考这篇学习笔记【数据结构】栈-CSDN博客。本博文中只选取部分知识点讲解。 简单来说我们可以把栈理解成一种 “运算受限” 的线性表即后进先出(Last In First Out简称LIFO)或先进后出(First In Last Out简称FILO)的原则进行的线性表因此栈又称为LIFO表或FILO表。 对于栈这种数据结构的定位我们可以从栈这个字本身出发。         “ 栈 ”是一个用于存储货物的房间就像我们古代用于旅人驻脚歇店的客栈人们不会在这久居不过是中转站罢了。 这个翻译可谓很灵性了计算机中的“ 栈 ”(Stack)也确实也可以理解为暂时存储的容器。比如在函数调用时底层编译器会把我们当前的数据放于这个临时的容器中存储避免在进入函数后当前上下文环境的信息丢失之后待到函数返回后再从Stack中取出。 当然这种数据中转存储的数据类型我们不是说都称之为栈还包括有有队列性质的高速缓存与各种正常的顺序存储的文件系统等只是说栈有些独有方面的特例。 二、栈的方法 1. 顺序表实现栈 同时需要注意的一点根据线性表的分类顺序表和链表 我们可以用这两种方式来实现栈的构建即分为顺序栈和链栈。本博文中通过顺序表来实现栈具体构造原理可以参考学习笔记这里不做展开。 /*** The depth.*/public static final int MAX_DEPTH 10;/*** The actual*/int depth;/*** The data*/char[] data;/************************ Construct an empty char stack.**********************/public CharStack() {depth 0;data new char[MAX_DEPTH];}// Of the first constructor/************************ Overrides the method claimed in Object, the superclass of any class.**********************/public String toString() {String resultString ;for (int i 0; i depth; i) {resultString data[i];} // Of for ireturn resultString;}// Of toString这里的属性与静态顺序表中的内容无差构造函数完成栈深度长度初始化空间开辟遵循静态链表开辟的方法——使用new开辟固定“MAX_DEPTH”大小的空间。 但注意栈是于栈顶一端进行删除与插入的结构而为了顺序表的实现方便我们往往在下标较大处插入因此我们定义栈顶在数组的最右侧。         所以按照从左向右打印的习惯toString()函数完成的就是栈底向栈顶的打印过程。 2. 入栈 本质上就是加入一个元素只不过位置被限定在栈顶。         从顺序表的角度来看其意义就是在顺序表的最后一个元素后面再插入一个元素。         由于位置固定所以我们只需要给末尾元素之后的空位赋值并且让栈深度1即可对于从0开始记录的任何表表长都默认值最后一个元素的下一个位置 /************************ Push an element.* * param paraChar The given char.* return Success or not.**********************/public boolean push(char paraChar) {if (depth MAX_DEPTH) {System.out.println(Stack full.);return false;} // Of ifdata[depth] paraChar;depth;return true;}// Of push对于任何顺序表的插入都不要忘记判断表满的情况因此这里先进行一次判满的判断这是栈的基本健壮性保证。         之后的入栈操作怎么写要根据你的栈顶指针的默认指向来确定。         这里我们用depth来表示栈深度同时自然也用于表示栈顶指针。这种情况的话depth默认指向的位置刚好就是尾元素后面的空位刚好可以直接插入于是可以使用 data[depth] paraChar;depth;我们可以做如下简写 data[depth] paraChar; 当然若栈顶指针假设指向末尾元素本身的话这里我们假设这个变量为top。在插入元素时需要保证栈顶指针要先移动到末尾元素后面的空位才能进行插入于是就要使用 top;data[top] paraChar;当然也可以简写成 data[top] paraChar; 习惯上我们会将入栈操作定义为 Boolean 类型这是因为布尔信息能够明确的告诉我们该操作是否成功。 3. 出栈  同顺序表一样元素删除需要先判断是否为空以保证程序的健壮性。         出栈时使用resultChar先接收栈顶数据之后再进行栈指针的下移操作实现逻辑上元素减少但是实际上这个值还是存放在原指针所指的位置的因为我们确定栈元素的多少仅依靠栈顶指针的具体值而定。 这个操作与入栈的操作是完全相逆的而且也会因为栈顶指针的含义不同而变化即栈顶指针指向栈顶有效元素的上方的一个无数据位一般我们令其值为 -1。由于这里我们采用的是 depth深度所以最小值为0但观察可知实际操作中读取的 depth - 1是等效的。 public char pop() {if (depth 0) {System.out.println(Nothing to pop.);return \0;} // Of ifchar resultChar data[depth - 1];depth--;return resultChar;}// Of pop三、代码及测试 package datastructure.stack;/*** Char stack. I do not use Stack because it is already defined in Java.** author: Changyang Hu joe03foxmail.com* date created: 2025-05-13*/ public class CharStack {/*** The depth.*/public static final int MAX_DEPTH 10;/*** The actual depth.*/int depth;/*** The data*/char[] data;/************************ Construct an empty char stack.**********************/public CharStack() {depth 0;data new char[MAX_DEPTH];}// Of the first constructor/************************ Overrides the method claimed in Object, the superclass of any class.**********************/public String toString() {String resultString ;for (int i 0; i depth; i) {resultString data[i];} // Of for ireturn resultString;}// Of toString/*** ********************** Title: push* Description: Push an element.** param paraChar The given char.* return Success or not.* return boolean **********************/public boolean push(char paraChar) {if (depth MAX_DEPTH) {System.out.println(Stack full.);return false;} // Of ifdata[depth] paraChar;depth;return true;}// Of push/*** ********************** Title: pop* Description: Pop an element.** return The popped char.* return char **********************/public char pop() {if (depth 0) {System.out.println(Nothing to pop.);return \0;} // Of ifchar resultChar data[depth - 1];depth--;return resultChar;}// Of pop/*** ********************** Title: main* Description: The entrance of the program.** param args Not used now.* return void **********************/public static void main(String args[]) {CharStack tempStack new CharStack();for (char ch a; ch m; ch) {tempStack.push(ch);System.out.println(The current stack is: tempStack);} // Of for chchar tempChar;for (int i 0; i 12; i) {tempChar tempStack.pop();System.out.println(Poped: tempChar);System.out.println(The current stack is: tempStack);} // Of for i}// Of main}// Of CharStack拓展 栈【数据结构】栈-CSDN博客 小结  通过顺序表来实现栈操作本身并不复杂只是说一些要点需要我们在使用前就想好 采用 depth指向栈顶的下一个元素还是 top指向栈顶作为下标采用顺序表来实现还是链表链表相关参考学习笔记 栈虽然本身简单但是其在数据传输中的战略地位极高。  栈实现了“ 调用 ”思想的核心。栈的临时存储与栈出数据总是最近一次栈入的数据的特性非常符合嵌套调用与返回的特性。所以如今我们使用的各种函数都用到了栈的思想任何使用函数完成的算法体系都可以使用栈完成模拟。 栈贯穿了计算机的各个邻域栈的概念在硬件中就早有使用因为栈的实现促成了操作系统的中断特性的实现而中断的特性又促成后来批处理操作系统的诞生是当代计算机的奠基石。也许毫不夸张说没有栈就没有我们如今的计算机的基础。
http://www.pierceye.com/news/549516/

相关文章:

  • 济宁网站建设工程教育网官网学员登录
  • html5导航网站源码下载wordpress 调用 discuz
  • 住房和城乡建设部网站 投诉有哪些网站可以学做糕点的
  • 电商购物网站m3u8插件 wordpress
  • 河北手机网站制作多少钱wordpress文章头部
  • 悠悠我心的个人网站素材网站建设教育培训
  • 网站建设定金做什么会计分录湘潭有实力的关键词优化公司
  • 网站备案 网站建设方案书云搜索app
  • 青岛网络推广建站民营医院建设网站
  • 罗湖住房和建设局网站wordpress调用内容代码
  • 网络logo设计优化设计七年级下册语文答案
  • 贵港网站seo安新网站建设
  • 网站怎么自己编辑模块创意网名大全
  • php的网站架构建设框架wordpress如何运行
  • 广州seo网站排名优化数码设计网站
  • 免费做视频相册的网站网站建设的功能描述
  • 网站建设方案浩森宇特alexa排名是什么意思
  • 网上手机网站建设计划书百度小说风云榜排名
  • 用js来做网站帝国cms这么做网站
  • 网站建设需求分析班级网站备案服务类型
  • 网站备案幕布照片怎么算合格北京专业网站开发
  • 浙江建设职业技术学院塘栖校区网站网络推广方法有几种
  • 呢图网站场建设封面长安镇做网站
  • 搜索关键词的网站黄山做网站
  • 网络建站系统去除wordpress主题头部作者信息
  • 鼓楼微网站开发番禺有经验的网站建设
  • 对网站建设心得进入公众号继续阅读怎么弄
  • 网站建设公司投诉电话可以先做网站后备案吗
  • 顺的品牌网站设计价位网站开发合同书
  • 用html5制作个人网站深圳百度国际大厦