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

朔州市住房与城乡建设厅网站鞍山贴吧最新消息

朔州市住房与城乡建设厅网站,鞍山贴吧最新消息,苏州吴中区注册公司,咖啡商城网页设计代码模板1.栈的概念 1.栈的定义 栈是仅限在表尾进行插入和删除的线性表#xff0c;栈又被称为先进后出的线性表#xff0c;简称“LIFO” 我们这次用数组作为我们栈的底层数据结构#xff0c;代码会放到结尾供大家参考使用 2.栈顶的定义 栈是一个线性表#xff0c;我们允许插入…1.栈的概念 1.栈的定义 栈是仅限在表尾进行插入和删除的线性表栈又被称为先进后出的线性表简称“LIFO” 我们这次用数组作为我们栈的底层数据结构代码会放到结尾供大家参考使用 2.栈顶的定义 栈是一个线性表我们允许插入和删除的一端称为栈顶 3.栈底的定义 和栈顶相对的另一端称为栈底实际上栈底的元素我们不需要关心 4.栈的创建 //数据容器private T[] data;//容积private int capacity;//实际存放的元素个数private int size; 2.入栈 1.入栈的定义 栈元素的插入操作叫做入栈也可以称为进栈、压栈 2.动画演示 图中是以链表为底层数据结构的大家看图了解个大概就可以了具体可以看代码是怎么实现的 3.代码实现 //在末尾添加元素public void addTail(T val) {//this.data[size]val;this.add(this.size, val);}//在中间插入元素public void add(int index, T val) {if (index 0 || index size) {throw new IllegalArgumentException(index is invalid!);}//判断数组是否满if(this.sizethis.capacity){//数组满的话扩容原来数组的两倍int newCapacitythis.capacity*2;T[] newDate(T[]) new Object[newCapacity];//创建一个新的数组//进行数组迁移for (int i 0; i this.size; i) {newDate[i]this.data[i];}this.capacitynewCapacity;this.datanewDate;} 3.出栈 1.出栈的定义 栈元素的删除操作叫做出栈也可称为弹栈 2.动画演示 3.代码演示 //移出末尾public T removeTail() { // T valthis.data[size-1]; // this.size-1; // return val;return this.remove(this.size);}//中部移出public T remove(int index) {if (index 0 || index size) {throw new IllegalArgumentException(index is invalid!);}T val this.data[index];for (int i index; i this.size; i) {this.data[i] this.data[i1];}this.size - 1;if(this.sizethis.capacity/4this.capacity/21){int newCapacitythis.capacity/2;T[] newDate(T[])new Object[newCapacity];for (int i 0; i this.size; i) {newDate[i]this.data[i];}this.capacitynewCapacity;this.datanewDate;} 4.查询栈顶 1.获取栈顶的定义 一般我们可以去查看栈顶的元素是什么 2.动画演示 3.代码演示 public T peek(T val) {return data.getEnByIndex(this.size() - 1);}//获得指定索引的元素public T getEnByIndex(int index) {if (index 0 || index size) {throw new IllegalArgumentException(index is invalid!);}return this.data[index];} 基本的栈能用到的就这些基本的方法接下来给大家一个完整的代码供大家学习参考 public class StackDemoT implements StackT {//以我们封装的数组作为栈的底层数据结构private arrSubTdata;public StackDemo() {datanew arrSub();}public StackDemo(int capacity) {datanew arrSub(capacity);}Override//弹栈public T pop() {return data.removeTail();}Override//往栈中添加元素public void push(T val) {data.addTail(val);}Override//查看元素个数public int size() {return data.getSize();//获得数组元素个数}Override//判断是否为空public boolean isEmpty() {return data.isEmpty();}Override//查看栈顶元素public T peek(T val) {return data.getEnByIndex(this.size() - 1);}Overridepublic T peek() {return null;}Overridepublic String toString() {StringBuilder sb new StringBuilder(栈顶[);T[] arr data.getData();for (int i size() - 1; i 0; i--) {sb.append(arr[i]);if (i ! 0) {sb.append(,);}}sb.append(]栈底);return sb.toString();}public static void main(String[] args) {StackString stack new StackDemo(10);String[] fruits {apple, banana, peach, watermelon, strawberry, pear, orange, grape};for (int i 0; i fruits.length; i) {stack.push(fruits[i]);}System.out.println(stack);while (!stack.isEmpty()) {System.out.println(ele-- stack.pop());System.out.println(stack 栈中元素的个数 stack.size());}} } public class arrSubT {//数据容器private T[] data;//容积private int capacity;//实际存放的元素个数private int size;public arrSub(int capacity) {this.capacity capacity;this.data (T[]) new Object[this.capacity];this.size 0;}public arrSub() {this.capacity 10;}// 判断数据容器是否为空public boolean isEmpty() {return this.size 0;}public T[] getData(){return this.data;}//获得数组的容积public int getCapacity() {return this.capacity;}//获取元素的个数public int getSize() {return this.size;}//首行添加元素public void addTop(T val) { // for (int i size-1; i 0 ; i--) { // this.data[i1]this.data[i]; // } // this.data[0]val;this.add(0, val);}//在末尾添加元素public void addTail(T val) {//this.data[size]val;this.add(this.size, val);}//在中间插入元素public void add(int index, T val) {if (index 0 || index size) {throw new IllegalArgumentException(index is invalid!);}//判断数组是否满if(this.sizethis.capacity){//数组满的话扩容原来数组的两倍int newCapacitythis.capacity*2;T[] newDate(T[]) new Object[newCapacity];//创建一个新的数组//进行数组迁移for (int i 0; i this.size; i) {newDate[i]this.data[i];}this.capacitynewCapacity;this.datanewDate;}for (int i this.size - 1; i index; i--) {this.data[i 1] this.data[i];}this.data[index] val;this.size 1;}//获得指定索引的元素public T getEnByIndex(int index) {if (index 0 || index size) {throw new IllegalArgumentException(index is invalid!);}return this.data[index];}//获得指定元素的索引public int getEnByVal(int index, T val) {if (index 0 || index size) {throw new IllegalArgumentException(index is invalid!);}for (int i 0; i this.size; i) {if (this.data[i] val) {return i;}}return -1;}//判断是否包含某种布局public boolean contains(T val) {for (int i 0; i this.size; i) {if (this.data[i] val) {return true;}}return false;}//修改指定索引的元素public void upLoad(T var, int index) {if (index 0 || index this.size) {throw new IllegalArgumentException(index is invalid!);}this.data[index] var;}//重写toString的方法Overridepublic String toString() {StringBuilder stringBuilder new StringBuilder(10);for (int i 0; i this.size; i) {stringBuilder.append(this.data[i] ,);}return stringBuilder.substring(0, stringBuilder.lastIndexOf(,) -1 ? 0 : stringBuilder.lastIndexOf(,));}//移出末尾public T removeTail() { // T valthis.data[size-1]; // this.size-1; // return val;return this.remove(this.size);}//移出首部public T removeTop() { // T valthis.data[0]; // for (int i 1; i this.size; i) { // this.data[i-1]this.data[i]; // } // this.size-1; // return val;return this.remove(0);}//中部移出public T remove(int index) {if (index 0 || index size) {throw new IllegalArgumentException(index is invalid!);}T val this.data[index];for (int i index; i this.size; i) {this.data[i] this.data[i1];}this.size - 1;if(this.sizethis.capacity/4this.capacity/21){int newCapacitythis.capacity/2;T[] newDate(T[])new Object[newCapacity];for (int i 0; i this.size; i) {newDate[i]this.data[i];}this.capacitynewCapacity;this.datanewDate;}return val;}public static void main(String[] args) {arrSub myArr new arrSub(50);for (int i 1; i 20; i) {myArr.addTail(i 10);}System.out.println(myArr); // System.out.println(20? myArr.contains(20)); // System.out.println(50? myArr.contains(50));while (!myArr.isEmpty()) {myArr.removeTail();System.out.println(myArr);}}leetcode题单 从尾到头打印链表 public int[] reversePrint(ListNode head) {LinkedListInteger stack new LinkedListInteger();while(head ! null) {stack.addLast(head.val);head head.next;}int[] res new int[stack.size()];for(int i 0; i res.length; i)res[i] stack.removeLast();return res;} 括号的最大嵌套深度 public int maxDepth(String s) {int ans 0, size 0;for (int i 0; i s.length(); i) {char ch s.charAt(i);if (ch () {size;ans Math.max(ans, size);} else if (ch )) {--size;}}return ans;} 回文链表 public boolean isPalindrome(ListNode head) {if(headnull){return false;}StringBuilder s1new StringBuilder();StringBuilder s2new StringBuilder();while(head!null){s1.append(head.val);s2.append(head.val);headhead.next;}s2.reverse();return s1.toString().equals(s2.toString());} 这里以数组为底层结构的队列代码供大家参考 import java.util.Optional;public class ArrQueueT implements QueueT {// 队列的容器CycleArrayT data;// 构造函数public ArrQueue() {data new CycleArray();}public ArrQueue(int capacity) {this.data new CycleArray(capacity);}Overridepublic void offer(T ele) {data.addTail(ele);}Overridepublic T poll() {return data.removeHead();}Overridepublic int size() {return data.getSize();}Overridepublic boolean isEmpty() {return data.isEmpty();}Overridepublic T peek() {OptionalT optional data.getFront();if (optional.isPresent()) {return optional.get();}return null;}Overridepublic String toString() {return data.toString();} }import java.util.Optional;/*解决了队列删除时的时间复杂度O(n),循环队列删除时的时间复杂度为O(1)* 假设有两个索引,front--始终指该数组的第一个元素 tail--始终指向元素插入位置* 如果fronttail时,该循环数组为空* 如果(tail1)%capacityfront时,该数组为满状态** */ /*** 循环队列的底层容器*/ public class CycleArrayT {// 数据容器private T[] data;// 容积private int capacity;// 实际存放元素的个数private int size;// 声明两个索引 front--队首 tail--队尾int front 0;int tail 0;// front tail 队列是空的 (tail1)/capacity front 队列是满的public CycleArray() {this(10);}public CycleArray(int capacity) {this.capacity capacity 1;//因为要浪费一个空间,所以在这里要多加一个空间this.data (T[]) new Object[this.capacity];// 浪费一个空间this.size 0;}public T[] getData() {return this.data;}// 1、队列是否为空public boolean isEmpty() {return this.front this.tail;}// 2、获取数组的容积public int getCapacity() {return this.capacity;}//3、获取实际存放元素的个数public int getSize() {return this.size;}// 在队列的尾部添加元素tail指向待插入元素的位置public void addTail(T val) {// 当队列已满要进行扩容if ((this.tail 1) % this.capacity this.front) {// 新的容积int newCapacity 2 * (this.capacity - 1);resize(newCapacity);}// 将val插入到队列的尾部this.data[this.tail] val;// tail向后移动this.tail (this.tail 1) % capacity;// 更新size的值this.size 1;}private void resize(int newCapacity) {T[] newData (T[]) new Object[newCapacity 1];// 迁移数据 this.frontint cur this.front;int index 0;while (cur ! this.tail) {newData[index] this.data[cur];cur (cur 1) % this.capacity;}// 修改属性this.capacity newCapacity 1;this.data newData;this.front 0;this.tail this.size;}Overridepublic String toString() {StringBuilder sb new StringBuilder();int cur this.front;while (cur ! this.tail) {sb.append(this.data[cur]);if ((cur 1) % this.capacity ! this.tail) {sb.append(,);}cur (cur 1) % this.capacity;}sb.append([ this.front -- this.tail ]);return sb.toString();}//从队列中移除元素public T removeHead() {// 1、队列是否为空if (this.front this.tail) {return null;}T val this.data[this.front];this.front (this.front 1) % this.capacity;this.size--;// 缩容if (this.size this.capacity / 4 this.capacity / 2 1) {resize(this.capacity / 2);}return val;}public OptionalT getFront() {if (isEmpty()) {return Optional.empty();}return Optional.of(this.data[this.front]);}// 测试public static void main(String[] args) {CycleArrayInteger myArr new CycleArray(5);for (int i 1; i 15; i) {myArr.addTail(i 25);System.out.println(添加 myArr);if (i % 3 0) {int val myArr.removeHead();System.out.println(删除 Header是 val);}}}
http://www.sadfv.cn/news/154963/

相关文章:

  • 正规手机网站怎么做钓鱼软件生成器
  • 福州最好的网站建设服务商网络营销策划与推广
  • 临沂网站建设咨询小程序推广任务入口
  • 汉口网站关键词排名营销策略分析论文框架
  • 网站后台文章列表里的每篇文章的文字全部乱码怎么办?网站提示宏
  • 四川省建设厅职称评审网站做评测好的视频网站有哪些
  • 邯郸网站建设怎么开发微信小程序开发费用一览表
  • 芯片商城网站建设做情诗网站
  • 沈阳做网站哪家质量好价格低企业网站新闻如何建设
  • 怎样在内网建设一个网站飘雪影视在线观看免费完整
  • 网站卖了对方做违法开发者模式怎么关闭华为
  • 互联网专线做网站怎么做数据陕西城乡住房建设厅网站
  • 韩国在中国做美食的视频网站wordpress网站响应时间太长
  • 2016年做水果行业专业网站承德百度网站建设
  • 腾讯云服务器可以做传奇网站吗苏州市企业排名100强
  • 网站显示搜索框天津 网站建设
  • php网站开发模式有哪些高并发网站开发语言
  • html怎么做网站版块网站建设合同附加协议
  • 服务器 网站 搬家做网站时会遇到什么问题
  • 电影网站cpa怎么做政务网站设计
  • 石家庄专业制作网站徐州在线制作网站
  • 网站建设要考虑哪些内容手机维修网站那个公司做的
  • 学校网站建设新闻只做网站应该找谁
  • 苏州朗冠网站建设公司酒业为什么做网站
  • 无锡网站建设要多少钱策划公司收费明细
  • 网站图片模板wordpress仿多特
  • 企业网站设计制作服务短剧个人主页简介模板
  • 龙岗在线网站制作代运营一个月多少钱
  • 商丘企业网站服务去哪找人做网站
  • 站群系统开发深圳定制建站公司电话