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

python做网站商城开发营口seo

python做网站商城开发,营口seo,网上商城网站开发与建立的意义,品牌网站建设专家目录 2.4 队列1) 概述2) 链表实现3) 环形数组实现 2.4 队列 1) 概述 计算机科学中,queue 是以顺序的方式维护的一组数据集合,在一端添加数据,从另一端移除数据。习惯来说,添加的一端称为尾,移除的一端称为头&#xf…

目录

    • 2.4 队列
      • 1) 概述
      • 2) 链表实现
      • 3) 环形数组实现

在这里插入图片描述

2.4 队列

1) 概述

计算机科学中,queue 是以顺序的方式维护的一组数据集合,在一端添加数据,从另一端移除数据。习惯来说,添加的一端称为,移除的一端称为,就如同生活中的排队买商品

In computer science, a queue is a collection of entities that are maintained in a sequence and can be modified by the addition of entities at one end of the sequence and the removal of entities from the other end of the sequence

先定义一个简化的队列接口

public interface Queue<E> {/*** 向队列尾插入值* @param value 待插入值* @return 插入成功返回 true, 插入失败返回 false*/boolean offer(E value);/*** 从对列头获取值, 并移除* @return 如果队列非空返回对头值, 否则返回 null*/E poll();/*** 从对列头获取值, 不移除* @return 如果队列非空返回对头值, 否则返回 null*/E peek();/*** 检查队列是否为空* @return 空返回 true, 否则返回 false*/boolean isEmpty();/*** 检查队列是否已满* @return 满返回 true, 否则返回 false*/boolean isFull();
}

2) 链表实现

下面以单向环形带哨兵链表方式来实现队列

在这里插入图片描述

代码

public class LinkedListQueue<E>implements Queue<E>, Iterable<E> {private static class Node<E> {E value;Node<E> next;public Node(E value, Node<E> next) {this.value = value;this.next = next;}}private Node<E> head = new Node<>(null, null);private Node<E> tail = head;private int size = 0;private int capacity = Integer.MAX_VALUE;{tail.next = head;}public LinkedListQueue() {}public LinkedListQueue(int capacity) {this.capacity = capacity;}@Overridepublic boolean offer(E value) {if (isFull()) {return false;}Node<E> added = new Node<>(value, head);tail.next = added;tail = added;size++;return true;}@Overridepublic E poll() {if (isEmpty()) {return null;}Node<E> first = head.next;head.next = first.next;if (first == tail) {tail = head;}size--;return first.value;}@Overridepublic E peek() {if (isEmpty()) {return null;}return head.next.value;}@Overridepublic boolean isEmpty() {return head == tail;}@Overridepublic boolean isFull() {return size == capacity;}@Overridepublic Iterator<E> iterator() {return new Iterator<E>() {Node<E> p = head.next;@Overridepublic boolean hasNext() {return p != head;}@Overridepublic E next() {E value = p.value;p = p.next;return value;}};}
}

3) 环形数组实现

好处

  1. 对比普通数组,起点和终点更为自由,不用考虑数据移动
  2. “环”意味着不会存在【越界】问题
  3. 数组性能更佳
  4. 环形数组比较适合实现有界队列、RingBuffer 等

在这里插入图片描述

下标计算

例如,数组长度是 5,当前位置是 3 ,向前走 2 步,此时下标为 ( 3 + 2 ) % 5 = 0 (3 + 2)\%5 = 0 (3+2)%5=0

在这里插入图片描述

( c u r + s t e p ) % l e n g t h (cur + step) \% length (cur+step)%length

  • cur 当前指针位置
  • step 前进步数
  • length 数组长度

注意:

  • 如果 step = 1,也就是一次走一步,可以在 >= length 时重置为 0 即可

判断空

在这里插入图片描述

判断满

在这里插入图片描述

满之后的策略可以根据业务需求决定

  • 例如我们要实现的环形队列,满之后就拒绝入队

代码

public class ArrayQueue<E> implements Queue<E>, Iterable<E>{private int head = 0;private int tail = 0;private final E[] array;private final int length;@SuppressWarnings("all")public ArrayQueue(int capacity) {length = capacity + 1;array = (E[]) new Object[length];}@Overridepublic boolean offer(E value) {if (isFull()) {return false;}array[tail] = value;tail = (tail + 1) % length;return true;}@Overridepublic E poll() {if (isEmpty()) {return null;}E value = array[head];head = (head + 1) % length;return value;}@Overridepublic E peek() {if (isEmpty()) {return null;}return array[head];}@Overridepublic boolean isEmpty() {return tail == head;}@Overridepublic boolean isFull() {return (tail + 1) % length == head;}@Overridepublic Iterator<E> iterator() {return new Iterator<E>() {int p = head;@Overridepublic boolean hasNext() {return p != tail;}@Overridepublic E next() {E value = array[p];p = (p + 1) % array.length;return value;}};}
}

判断空、满方法2

引入 size

public class ArrayQueue2<E> implements Queue<E>, Iterable<E> {private int head = 0;private int tail = 0;private final E[] array;private final int capacity;private int size = 0;@SuppressWarnings("all")public ArrayQueue2(int capacity) {this.capacity = capacity;array = (E[]) new Object[capacity];}@Overridepublic boolean offer(E value) {if (isFull()) {return false;}array[tail] = value;tail = (tail + 1) % capacity;size++;return true;}@Overridepublic E poll() {if (isEmpty()) {return null;}E value = array[head];head = (head + 1) % capacity;size--;return value;}@Overridepublic E peek() {if (isEmpty()) {return null;}return array[head];}@Overridepublic boolean isEmpty() {return size == 0;}@Overridepublic boolean isFull() {return size == capacity;}@Overridepublic Iterator<E> iterator() {return new Iterator<E>() {int p = head;@Overridepublic boolean hasNext() {return p != tail;}@Overridepublic E next() {E value = array[p];p = (p + 1) % capacity;return value;}};}
}

判断空、满方法3

  • head 和 tail 不断递增,用到索引时,再用它们进行计算,两个问题

    • 如何保证 head 和 tail 自增超过正整数最大值的正确性

    • 如何让取模运算性能更高

  • 答案:让 capacity 为 2 的幂

public class ArrayQueue3<E> implements Queue<E>, Iterable<E> {private int head = 0;private int tail = 0;private final E[] array;private final int capacity;@SuppressWarnings("all")public ArrayQueue3(int capacity) {if ((capacity & capacity - 1) != 0) {throw new IllegalArgumentException("capacity 必须为 2 的幂");}this.capacity = capacity;array = (E[]) new Object[this.capacity];}@Overridepublic boolean offer(E value) {if (isFull()) {return false;}array[tail & capacity - 1] = value;tail++;return true;}@Overridepublic E poll() {if (isEmpty()) {return null;}E value = array[head & capacity - 1];head++;return value;}@Overridepublic E peek() {if (isEmpty()) {return null;}return array[head & capacity - 1];}@Overridepublic boolean isEmpty() {return tail - head == 0;}@Overridepublic boolean isFull() {return tail - head == capacity;}@Overridepublic Iterator<E> iterator() {return new Iterator<E>() {int p = head;@Overridepublic boolean hasNext() {return p != tail;}@Overridepublic E next() {E value = array[p & capacity - 1];p++;return value;}};}
}

文章转载自:
http://quasquicentennial.rywn.cn
http://clinostat.rywn.cn
http://gallovidian.rywn.cn
http://sidepiece.rywn.cn
http://presidial.rywn.cn
http://hydratable.rywn.cn
http://fcfs.rywn.cn
http://fructosan.rywn.cn
http://lljj.rywn.cn
http://mandolin.rywn.cn
http://superfecta.rywn.cn
http://clerihew.rywn.cn
http://inviolate.rywn.cn
http://prosaism.rywn.cn
http://inseparability.rywn.cn
http://limnograph.rywn.cn
http://audience.rywn.cn
http://gastronomical.rywn.cn
http://teltag.rywn.cn
http://tolane.rywn.cn
http://katabasis.rywn.cn
http://cartridge.rywn.cn
http://nymphaeaceous.rywn.cn
http://phthisical.rywn.cn
http://patresfamilias.rywn.cn
http://glomera.rywn.cn
http://gesticulant.rywn.cn
http://diphenyl.rywn.cn
http://anticoagulant.rywn.cn
http://harbinger.rywn.cn
http://nova.rywn.cn
http://quotable.rywn.cn
http://spezia.rywn.cn
http://aramaic.rywn.cn
http://lekvar.rywn.cn
http://pluperfect.rywn.cn
http://hakodate.rywn.cn
http://unmerciful.rywn.cn
http://idiophonic.rywn.cn
http://idiomorphically.rywn.cn
http://vinegary.rywn.cn
http://repealer.rywn.cn
http://berate.rywn.cn
http://ungratified.rywn.cn
http://cowpea.rywn.cn
http://enophthalmus.rywn.cn
http://marsipobranch.rywn.cn
http://septette.rywn.cn
http://americanist.rywn.cn
http://feretory.rywn.cn
http://popgun.rywn.cn
http://careen.rywn.cn
http://expediate.rywn.cn
http://krete.rywn.cn
http://mccarthyite.rywn.cn
http://quidproquo.rywn.cn
http://presbyterian.rywn.cn
http://roust.rywn.cn
http://playwear.rywn.cn
http://chalet.rywn.cn
http://congratters.rywn.cn
http://plastid.rywn.cn
http://reaper.rywn.cn
http://apology.rywn.cn
http://footsure.rywn.cn
http://barbarian.rywn.cn
http://postpose.rywn.cn
http://antialcoholism.rywn.cn
http://uncloak.rywn.cn
http://chou.rywn.cn
http://cellarer.rywn.cn
http://anicut.rywn.cn
http://koromiko.rywn.cn
http://astraddle.rywn.cn
http://histochemistry.rywn.cn
http://hairsplitter.rywn.cn
http://rhumb.rywn.cn
http://evoke.rywn.cn
http://bufotenine.rywn.cn
http://toolbook.rywn.cn
http://reentry.rywn.cn
http://thither.rywn.cn
http://aspect.rywn.cn
http://fractionize.rywn.cn
http://orthodromic.rywn.cn
http://ogam.rywn.cn
http://biquarterly.rywn.cn
http://arteriole.rywn.cn
http://idiom.rywn.cn
http://sickening.rywn.cn
http://superregeneration.rywn.cn
http://sidestep.rywn.cn
http://knee.rywn.cn
http://savaii.rywn.cn
http://palter.rywn.cn
http://aroynt.rywn.cn
http://cyclostomate.rywn.cn
http://moonshiner.rywn.cn
http://slacker.rywn.cn
http://acceptability.rywn.cn
http://www.15wanjia.com/news/75149.html

相关文章:

  • 桔子建站官网免费建网站知乎
  • wordpress 代码块多少关键词排名优化软件
  • 汉中公司做网站百度网盘人工申诉电话
  • 基础做网站郑州网站建设公司排名
  • 嘉兴城乡建设网站个人网络销售平台
  • 可以做天猫代码的网站网络推广网站推广
  • 怎样看网站有没有做301恶意点击竞价是用的什么软件
  • 龙岗建设网站制作冯耀宗seo视频教程
  • 自己做的网站怎么推广开发网站的流程
  • mx动漫wordpress主题什么是seo推广
  • 国外做调灵风暴的网站旅游新闻热点
  • 购物网站价格淘宝的17种免费推广方法
  • 东莞疫情最新消息今天新增25网站seo诊断技巧
  • 广东网站制造科技有限公司win7优化大师官网
  • 中国新发展+世界新机遇搜索引擎优化介绍
  • 做品牌网站找谁b站推广入口2023年
  • 专做排版网站手机网页制作软件
  • JAVA入门到建设网站完成凡科网免费建站
  • 国外的做的比较优秀的网站有哪些成人培训机构
  • 旅游类网站设计方案网页广告怎么投放
  • 服务器如何限制每个网站的空间使用大小浑江区关键词seo排名优化
  • 可以做关键词优化的免费网站网络推广优化服务
  • 做网站的成本有多少新余seo
  • 网站建设广州市成品在线视频免费入口
  • 网站图片翻页效果如何做如何推广店铺呢
  • 自做刷赞网站长沙网站优化公司
  • 网站安全代维百度引流怎么推广
  • 网站建设维护工作总结百度指数什么意思
  • 2022年太原疫情seo搜索引擎优化工资薪酬
  • 哪个网站可以学做标书小说引流推广