待解:Array; Queue

 1 package com.java7;
 2 /*
 3  * Try This 5-2
 4  * A queue class for characters.
 5  */
 6 class Queue {
 7     char q[]; // this array holds the queue
 8     int putloc, getloc; // the put and get indices
 9
10     Queue(int size) {
11         q = new char[size+1]; // allocate memory for queue
12         putloc = getloc = 0;
13     }
14
15     // put a character into the queue
16     void put(char ch) {
17         if(putloc==q.length-1){
18             System.out.println(" - Queue is full.");
19             return;
20         }
21
22         putloc++;
23         q[putloc] = ch;
24     }
25
26     // get a character from the queue
27     char get() {
28         if(getloc == putloc) {
29             System.out.println(" - Queue is empty.");
30             return (char) 0;
31         }
32
33         getloc++;
34         return q[getloc];
35     }
36 }
37
38 //Demonstrate the Queue class.
39 class QDemo {
40     public static void main(String[] args) {
41         Queue bigQ = new Queue(100);
42         Queue smallQ = new Queue(4);
43         char ch;
44         int i;
45
46         System.out.println("Using bigQ to store the alphabet.");
47         // put some numbers into bigQ
48         for(i = 0; i < 26; i++)
49             bigQ.put((char) (‘A‘ + i));
50
51         // retrieve and display elements from bigQ
52         System.out.print("Contents of bigQ: ");
53         for(i = 0; i < 26; i++) {
54             ch = bigQ.get();
55             if(ch != (char) 0) System.out.print(ch);
56         }
57
58         System.out.println("\n");
59
60         System.out.println("Using smallQ to generate errors.");
61         // Now, use smallQ to generate some errors
62         for(i = 0; i < 5; i++) {
63             System.out.print("Attempting to store " + (char) (‘Z‘ - i));
64             smallQ.put((char) (‘Z‘ - i));
65             System.out.println();
66         }
67         System.out.println();
68
69         // more errors on smallQ
70         System.out.print("Contents of smallQ: ");
71         for(i = 0; i < 5; i++) {
72             ch = smallQ.get();
73
74             if (ch != (char) 0) System.out.print(ch);
75         }
76     }
77 }

执行结果:

Using bigQ to store the alphabet.

Contents of bigQ: ABCDEFGHIJKLMNOPQRSTUVWXYZ

Using smallQ to generate errors.

Attempting to store Z

Attempting to store Y

Attempting to store X

Attempting to store W

Attempting to store V - Queue is full.

Contents of smallQ: ZYXW - Queue is empty.

练习2:尝试修改Queue,以使其存储其他类型的对象。

时间: 2024-11-04 07:14:30

待解:Array; Queue的相关文章

JavaScript原生对象属性和方法详解——Array对象 转载

length 设置或返回 数组中元素的数目. 注意:设置 length 属性可改变数组的大小.如果设置的值比其当前值小,数组将被截断,其尾部的元素将丢失.如果设置的值比它的当前值大,数组将增大,新的元素被添加到数组的尾部,它们的值为 undefined.所以length不一定代表数组的元素个数. var arr = new Array(3) arr[0] = "John" arr[1] = "Andy" arr[2] = "Wendy" cons

JavaScript原生对象属性和方法详解——Array对象

http://www.feeldesignstudio.com/2013/09/native-javascript-object-properties-and-methods-array/ length 设置或返回 数组中元素的数目. 注意:设置 length 属性可改变数组的大小.如果设置的值比其当前值小,数组将被截断,其尾部的元素将丢失.如果设置的值比它的当前值大,数组将增大,新的元素被添加到数组的尾部,它们的值为 undefined.所以length不一定代表数组的元素个数. var ar

JavaScript原生对象属性和方法详解——Array对象[转]

length 设置或返回 数组中元素的数目. 注意:设置 length 属性可改变数组的大小.如果设置的值比其当前值小,数组将被截断,其尾部的元素将丢失.如果设置的值比它的当前值大,数组将增大,新的元素被添加到数组的尾部,它们的值为 undefined.所以length不一定代表数组的元素个数. var arr = new Array(3) arr[0] = "John" arr[1] = "Andy" arr[2] = "Wendy" cons

Array.prototype.slice.call()方法详解

Array.prototype.slice.call()方法详解 Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与com对象不能进行转换) 原文地址:https://www.cnblogs.com/yangai/p/11081820.html

PriorityQueue和Queue的一种变体的实现

队列和优先队列是我们十分熟悉的数据结构.提供了所谓的“先进先出”功能,优先队列则按照某种规则“先进先出”.但是他们都没有提供:“固定大小的队列”和“固定大小的优先队列”的功能. 比如我们要实现:记录按照时间排序的最近的登录网站的20个人:按照分数排序的最高的30个人:比如在游戏中一场两两PK的战斗,得分最高的6个人:要实现这些功能时,需要的数据结构,在java类库中没有现成的类.我们需要利用现有的类库来实现它们. 1. 固定大小的“先进先出”队列 import java.util.ArrayLi

探究一种定长队列操作(C语言版本)

一 问题来源:南京烽火通信面试 二 问题: 现有一种定长队列,长度为2的n次方,此队列可被多线程访问,但必须确保线程级安全,即在任意时刻,队列的长度保持不变. 三 笔者分析 1. 队列的存储结构--链式和顺序均可. 2. 长度为2的n次方--便于移动队头和队尾指针,假设队列长度为size,那么rear = (rear + 1) & (size - 1),&运算比算术求模运算效率高.为此,笔者使用了顺序队列. 3. 怎么确保线程级安全 笔者认为此系统一定同时存在多个读者和写者,读者是读取队头

转载:无锁队列的实现(CAS同步)

转自:http://coolshell.cn/articles/8239.html 关于无锁队列的实现,网上有很多文章,虽然本文可能和那些文章有所重复,但是我还是想以我自己的方式把这些文章中的重要的知识点串起来和大家讲一讲这个技术.下面开始正文. 关于CAS等原子操作 在开始说无锁队列之前,我们需要知道一个很重要的技术就是CAS操作——Compare & Set,或是 Compare & Swap,现在几乎所有的CPU指令都支持CAS的原子操作,X86下对应的是 CMPXCHG 汇编指令.

并发无锁队列

1.前言 队列在计算机中非常重要的一种数据结构,尤其在操作系统中.队列典型的特征是先进先出(FIFO),符合流水线业务流程.在进程间通信.网络通信之间经常采用队列做缓存,缓解数据处理压力.结合自己在工作中遇到的队列问题,总结一下对不同场景下的队列实现.根据操作队列的场景分为:单生产者--单消费者.多生产者--单消费者.单生产者--多消费者.多生产者--多消费者四大模型.其实后面三种的队列,可以归纳为一种多对多.根据队列中数据分为:队列中的数据是定长的.队列中的数据是变长的. 2.队列操作模型 (

原子操作实现无锁队列

关于CAS等原子操作 在开始说无锁队列之前,我们需要知道一个很重要的技术就是CAS操作——Compare & Set或是 Compare & Swap,现在几乎所有的CPU指令都支持CAS的原子操作,X86下对应的是 CMPXCHG 汇编指令.有了这个原子操作,我们就可以用其来实现各种无锁(lock free)的数据结构. 这个操作用C语言来描述就是下面这个样子:(代码来自Wikipedia的Compare And Swap词条)意思就是说,看一看内存*reg里的值是不是oldval,如果