- 浏览: 3462353 次
- 性别:
- 来自: China
文章分类
- 全部博客 (536)
- ajax (1)
- Algorithm (14)
- Android (40)
- CSS/HTML... (2)
- defy (3)
- DesignPattern (2)
- dorado (0)
- Drools (6)
- English/日本語 (7)
- Flex (2)
- Framework (0)
- Google (3)
- hibernate (13)
- homework (3)
- HTML5 (0)
- IDE (29)
- java (45)
- javaee (7)
- Javascript (14)
- java组件 (5)
- jQuery (4)
- jsp (8)
- jsf (2)
- Linux (2)
- lucene (0)
- mysql (6)
- news (3)
- Oracle (8)
- other (4)
- PHP (5)
- Python (0)
- Software Engineering (3)
- spring (7)
- struts1.x (14)
- struts2.x (14)
- strolling in cloud (1)
- subject:javaEnhance (20)
- Tomcat (7)
- validator (3)
- 学习·方法·心得 (8)
- .NET (2)
- vba (6)
- groovy (5)
- grails (2)
- SWT (0)
- big data (1)
- perl (1)
- objective-c (50)
- product (1)
- mac (7)
- ios (188)
- ios-phone (2)
- ios-system (15)
- ios-network (5)
- ios-file (4)
- ios-db (1)
- ios-media (3)
- ios-ui (27)
- ios-openSource (6)
- ios-animation (5)
- ios-drawing (7)
- c (2)
- ios-app (2)
- ios-course (15)
- ios-runtime (14)
- ios-code (8)
- ios-thread (8)
- ios-LBS (2)
- ios-issue (1)
- ios-design (2)
- Jailbreak (2)
- cocos2d (0)
- swift (16)
- ios-framework (4)
- apple watch (4)
- ios-web (1)
- react native (3)
- TVOS (1)
- OpenGL (1)
最新评论
-
xiaobinggg:
...
Session机制详解 -
菜鸟学生会:
Drools规则工作流引擎开发教程网盘地址:http://pa ...
Drools入门-----------环境搭建,分析Helloworld -
wangyudong:
不是很好用,不支持自动化测试RESTful API,也不支持自 ...
Simple REST Client POST使用方法 -
Paul0523:
很棒的一篇文章,感谢楼主分享
Session机制详解 -
啸笑天:
获取原型对象的三种方法<script>functi ...
复习JavaScript面向对象技术
顺序栈的实现
import java.util.Arrays; public class SequenceStack<T> { private int DEFAULT_SIZE = 10; //保存数组的长度。 private int capacity; //定义当底层数组容量不够时,程序每次增加的数组长度 private int capacityIncrement = 0; //定义一个数组用于保存顺序栈的元素 private Object[] elementData; //保存顺序栈中元素的当前个数 private int size = 0; //以默认数组长度创建空顺序栈 public SequenceStack() { capacity = DEFAULT_SIZE; elementData = new Object[capacity]; } //以一个初始化元素来创建顺序栈 public SequenceStack(T element) { this(); elementData[0] = element; size++; } /** * 以指定长度的数组来创建顺序栈 * @param element 指定顺序栈中第一个元素 * @param initSize 指定顺序栈底层数组的长度 */ public SequenceStack(T element , int initSize) { this.capacity = initSize; elementData = new Object[capacity]; elementData[0] = element; size++; } /** * 以指定长度的数组来创建顺序栈 * @param element 指定顺序栈中第一个元素 * @param initSize 指定顺序栈底层数组的长度 * @param capacityIncrement 指定当顺序栈底层数组的长度不够时,底层数组每次增加的长度 */ public SequenceStack(T element , int initSize , int capacityIncrement) { this.capacity = initSize; this.capacityIncrement = capacityIncrement; elementData = new Object[capacity]; elementData[0] = element; size++; } //获取顺序栈的大小 public int length() { return size; } //入栈 public void push(T element) { ensureCapacity(size + 1); elementData[size++] = element; } //很麻烦,而且性能很差 private void ensureCapacity(int minCapacity) { //如果数组的原有长度小于目前所需的长度 if (minCapacity > capacity) { if (capacityIncrement > 0) { while (capacity < minCapacity) { //不断地将capacity长度加capacityIncrement, //直到capacity大于minCapacity为止 capacity += capacityIncrement; } } else { //不断地将capacity * 2,直到capacity大于minCapacity为止 while (capacity < minCapacity) { capacity <<= 1; } } elementData = Arrays.copyOf(elementData , capacity); } } //出栈 public T pop() { T oldValue = (T)elementData[size - 1]; //释放栈顶元素 elementData[--size] = null; return oldValue; } //返回栈顶元素,但不删除栈顶元素 public T peek() { return (T)elementData[size - 1]; } //判断顺序栈是否为空栈 public boolean empty() { return size == 0; } //清空顺序栈 public void clear() { //将底层数组所有元素赋为null Arrays.fill(elementData , null); size = 0; } public String toString() { if (size == 0) { return "[]"; } else { StringBuilder sb = new StringBuilder("["); for (int i = size - 1 ; i > -1 ; i-- ) { sb.append(elementData[i].toString() + ", "); } int len = sb.length(); return sb.delete(len - 2 , len).append("]").toString(); } } public static void main(String[] args) { SequenceStack<String> stack = new SequenceStack<String>(); //不断地入栈 stack.push("aaaa"); stack.push("bbbb"); stack.push("cccc"); stack.push("dddd"); System.out.println(stack); //访问栈顶元素 System.out.println("访问栈顶元素:" + stack.peek()); //弹出一个元素 System.out.println("第一次弹出栈顶元素:" + stack.pop()); //再次弹出一个元素 System.out.println("第二次弹出栈顶元素:" + stack.pop()); System.out.println("两次pop之后的栈:" + stack); } }
链式栈的实现
public class LinkStack<T> { //定义一个内部类Node,Node实例代表链栈的节点。 private class Node { //保存节点的数据 private T data; //指向下个节点的引用 private Node next; //无参数的构造器 public Node() { } //初始化全部属性的构造器 public Node(T data , Node next) { this.data = data; this.next = next; } } //保存该链栈的栈顶元素 private Node top; //保存该链栈中已包含的节点数 private int size; //创建空链栈 public LinkStack() { //空链栈,top的值为null top = null; } //以指定数据元素来创建链栈,该链栈只有一个元素 public LinkStack(T element) { top = new Node(element , null); size++; } //返回链栈的长度 public int length() { return size; } //进栈 public void push(T element) { //让top指向新创建的元素,新元素的next引用指向原来的栈顶元素 top = new Node(element , top); size++; } //出栈 public T pop() { Node oldTop = top; //让top引用指向原栈顶元素的下一个元素 top = top.next; //释放原栈顶元素的next引用 oldTop.next = null; size--; return oldTop.data; } //访问栈顶元素,但不删除栈顶元素 public T peek() { return top.data; } //判断链栈是否为空栈 public boolean empty() { return size == 0; } //清空链栈 public void clear() { //将底层数组所有元素赋为null top = null; size = 0; } public String toString() { //链栈为空链栈时 if (empty()) { return "[]"; } else { StringBuilder sb = new StringBuilder("["); for (Node current = top ; current != null ; current = current.next ) { sb.append(current.data.toString() + ", "); } int len = sb.length(); return sb.delete(len - 2 , len).append("]").toString(); } } public static void main(String[] args) { LinkStack<String> stack = new LinkStack<String>(); //不断地入栈 stack.push("aaaa"); stack.push("bbbb"); stack.push("cccc"); stack.push("dddd"); System.out.println(stack); //访问栈顶元素 System.out.println("访问栈顶元素:" + stack.peek()); //弹出一个元素 System.out.println("第一次弹出栈顶元素:" + stack.pop()); //再次弹出一个元素 System.out.println("第二次弹出栈顶元素:" + stack.pop()); System.out.println("两次pop之后的栈:" + stack); } }
顺序队列的实现
import java.util.Arrays; public class SequenceQueue<T> { private int DEFAULT_SIZE = 10; //保存数组的长度。 private int capacity; //定义一个数组用于保存顺序队列的元素 private Object[] elementData; //保存顺序队列中元素的当前个数 private int front = 0; private int rear = 0; //以默认数组长度创建空顺序队列 public SequenceQueue() { capacity = DEFAULT_SIZE; elementData = new Object[capacity]; } //以一个初始化元素来创建顺序队列 public SequenceQueue(T element) { this(); elementData[0] = element; rear++; } /** * 以指定长度的数组来创建顺序队列 * @param element 指定顺序队列中第一个元素 * @param initSize 指定顺序队列底层数组的长度 */ public SequenceQueue(T element , int initSize) { this.capacity = initSize; elementData = new Object[capacity]; elementData[0] = element; rear++; } //获取顺序队列的大小 public int length() { return rear - front; } //插入队列 public void add(T element) { if (rear > capacity - 1) { throw new IndexOutOfBoundsException("队列已满的异常"); } elementData[rear++] = element; } //移除队列 public T remove() { if (empty()) { throw new IndexOutOfBoundsException("空队列异常"); } //保留队列的rear端的元素的值 T oldValue = (T)elementData[front]; //释放队列的rear端的元素 elementData[front++] = null; return oldValue; } //返回队列顶元素,但不删除队列顶元素 public T element() { if (empty()) { throw new IndexOutOfBoundsException("空队列异常"); } return (T)elementData[front]; } //判断顺序队列是否为空队列 public boolean empty() { return rear == front; } //清空顺序队列 public void clear() { //将底层数组所有元素赋为null Arrays.fill(elementData , null); front = 0; rear = 0; } public String toString() { if (empty()) { return "[]"; } else { StringBuilder sb = new StringBuilder("["); for (int i = front ; i < rear ; i++ ) { sb.append(elementData[i].toString() + ", "); } int len = sb.length(); return sb.delete(len - 2 , len).append("]").toString(); } } public static void main(String[] args) { SequenceQueue<String> queue = new SequenceQueue<String>(); //依次将4个元素加入队列 queue.add("aaaa"); queue.add("bbbb"); queue.add("cccc"); queue.add("dddd"); System.out.println(queue); System.out.println("访问队列的front端元素:" + queue.element()); System.out.println("移除队列的front端元素:" + queue.remove()); System.out.println("移除队列的front端元素:" + queue.remove()); System.out.println("两次调用remove方法后的队列:" + queue); } }
循环队列的实现
import java.util.Arrays; public class LoopQueue<T> { private int DEFAULT_SIZE = 10; //保存数组的长度。 private int capacity; //定义一个数组用于保存循环队列的元素 private Object[] elementData; //保存循环队列中元素的当前个数 private int front = 0; private int rear = 0; //以默认数组长度创建空循环队列 public LoopQueue() { capacity = DEFAULT_SIZE; elementData = new Object[capacity]; } //以一个初始化元素来创建循环队列 public LoopQueue(T element) { this(); elementData[0] = element; rear++; } /** * 以指定长度的数组来创建循环队列 * @param element 指定循环队列中第一个元素 * @param initSize 指定循环队列底层数组的长度 */ public LoopQueue(T element , int initSize) { this.capacity = initSize; elementData = new Object[capacity]; elementData[0] = element; rear++; } //获取循环队列的大小 public int length() { if (empty()) { return 0; } return rear > front ? rear - front : capacity - (front - rear); } //插入队列 public void add(T element) { if (rear == front && elementData[front] != null) { throw new IndexOutOfBoundsException("队列已满的异常"); } elementData[rear++] = element; //如果rear已经到头,那就转头 rear = rear == capacity ? 0 : rear; } //移除队列 public T remove() { if (empty()) { throw new IndexOutOfBoundsException("空队列异常"); } //保留队列的rear端的元素的值 T oldValue = (T)elementData[front]; //释放队列的rear端的元素 elementData[front++] = null; //如果front已经到头,那就转头 front = front == capacity ? 0 : front; return oldValue; } //返回队列顶元素,但不删除队列顶元素 public T element() { if (empty()) { throw new IndexOutOfBoundsException("空队列异常"); } return (T)elementData[front]; } //判断循环队列是否为空队列 public boolean empty() { //rear==front且rear处的元素为null return rear == front && elementData[rear] == null; } //清空循环队列 public void clear() { //将底层数组所有元素赋为null Arrays.fill(elementData , null); front = 0; rear = 0; } public String toString() { if (empty()) { return "[]"; } else { //如果front < rear,有效元素就是front到rear之间的元素 if (front < rear) { StringBuilder sb = new StringBuilder("["); for (int i = front ; i < rear ; i++ ) { sb.append(elementData[i].toString() + ", "); } int len = sb.length(); return sb.delete(len - 2 , len).append("]").toString(); } //如果front >= rear,有效元素为front->capacity之间、0->front之间的 else { StringBuilder sb = new StringBuilder("["); for (int i = front ; i < capacity ; i++ ) { sb.append(elementData[i].toString() + ", "); } for (int i = 0 ; i < rear ; i++) { sb.append(elementData[i].toString() + ", "); } int len = sb.length(); return sb.delete(len - 2 , len).append("]").toString(); } } } public static void main(String[] args) { LoopQueue<String> queue = new LoopQueue<String>("aaaa" , 3); //添加两个元素 queue.add("bbbb"); queue.add("cccc"); //此时队列已满 System.out.println(queue); //删除一个元素后,队列可以再多加一个元素 queue.remove(); System.out.println("删除一个元素后的队列:" + queue); //再次添加一个元素,此时队列又满 queue.add("dddd"); System.out.println(queue); System.out.println("队列满时的长度:" + queue.length()); //删除一个元素后,队列可以再多加一个元素 queue.remove(); //再次加入一个元素,此时队列又满 queue.add("eeee"); System.out.println(queue); } }
链式队列的实现
public class LinkQueue<T> { //定义一个内部类Node,Node实例代表链队列的节点。 private class Node { //保存节点的数据 private T data; //指向下个节点的引用 private Node next; //无参数的构造器 public Node() { } //初始化全部属性的构造器 public Node(T data , Node next) { this.data = data; this.next = next; } } //保存该链队列的头节点 private Node front; //保存该链队列的尾节点 private Node rear; //保存该链队列中已包含的节点数 private int size; //创建空链队列 public LinkQueue() { //空链队列,front和rear都是null front = null; rear = null; } //以指定数据元素来创建链队列,该链队列只有一个元素 public LinkQueue(T element) { front = new Node(element , null); //只有一个节点,front、rear都指向该节点 rear = front; size++; } //返回链队列的长度 public int length() { return size; } //将新元素加入队列 public void add(T element) { //如果该链队列还是空链队列 if (front == null) { front = new Node(element , null); //只有一个节点,front、rear都指向该节点 rear = front; } else { //创建新节点 Node newNode = new Node(element , null); //让尾节点的next指向新增的节点 rear.next = newNode; //以新节点作为新的尾节点 rear = newNode; } size++; } //删除队列front端的元素 public T remove() { Node oldFront = front; front = front.next; oldFront.next = null; size--; return oldFront.data; } //访问链式队列中最后一个元素 public T element() { return rear.data; } //判断链式队列是否为空队列 public boolean empty() { return size == 0; } //清空链队列 public void clear() { //将front、rear两个节点赋为null front = null; rear = null; size = 0; } public String toString() { //链队列为空链队列时 if (empty()) { return "[]"; } else { StringBuilder sb = new StringBuilder("["); for (Node current = front ; current != null ; current = current.next ) { sb.append(current.data.toString() + ", "); } int len = sb.length(); return sb.delete(len - 2 , len).append("]").toString(); } } public static void main(String[] args) { LinkQueue<String> queue = new LinkQueue<String>("aaaa"); //添加两个元素 queue.add("bbbb"); queue.add("cccc"); System.out.println(queue); //删除一个元素后 queue.remove(); System.out.println("删除一个元素后的队列:" + queue); //再次添加一个元素 queue.add("dddd"); System.out.println("再次添加元素后的队列:" + queue); //删除一个元素后,队列可以再多加一个元素 queue.remove(); //再次加入一个元素 queue.add("eeee"); System.out.println(queue); } }
发表评论
-
qweqwe
2012-07-11 16:06 1江蛤蟆 一统江湖 -
123123123
2012-07-11 16:04 0<p>法轮</p> -
母牛繁殖问题
2011-12-30 13:08 3888question:农场的母牛寿命是5年,母牛第二年和第四年会繁 ... -
树形显示
2011-07-17 11:26 1676/** 树形结构应用十分广泛。 下面这段代码根据 ... -
求能除尽1至n的最小整数
2011-07-16 02:43 4012为什么1小时有60分钟,而不是100分钟呢?这是历史上的 ... -
java 四则运算 栈的实现
2011-07-15 13:42 13892import java.util.Stack; /* ... -
用1、2、3、3、4、5这六个数字,用java写一个程序,打印出所有不同的排列 要求:"4"不能在第三位,"3"与"5"不能相连。
2011-07-15 12:45 3412用1、2、3、3、4、5这六 ... -
【code】java红黑树
2011-06-28 10:07 3483import java.util.*; publi ... -
【code】java实现排序二叉树
2011-06-27 21:45 2901import java.util.*; publi ... -
【code】java创建哈夫曼树和实现哈夫曼编码
2011-06-27 17:31 12917创建哈夫曼树 主要思想: (1)对List集合中所有节点进 ... -
【code】java实现十种常见内部排序
2011-06-20 19:22 3121常见的内部排序: 下面介绍这十种常见内部排序(都是从 ... -
【code】java二叉树深(先中后)、广遍历
2011-06-19 16:55 1994import java.util.*; publi ... -
【code】java二叉树的实现
2011-06-17 22:50 5900二叉树的顺序存储 public class Array ... -
【code】java树的实现
2011-06-17 22:20 11991树的父节点存储实现 import java.util. ... -
【code】java线性表实现
2011-06-16 21:24 3703顺序线性表的实现 import java.util.A ...
相关推荐
在本文中,我们将实现一个简单的 Java 消息队列,使用 LinkedList 进行封装和实现。首先,我们定义一个栈类 MyStack,使用 LinkedList 存储元素,并提供 push、peek、pop 和 empty 等方法。 ```java public class ...
Java作为一种面向对象的语言,提供了多种内置数据结构,如数组、链表、栈、队列、集合、映射等,同时允许程序员自定义复杂的数据结构。 【描述】:“english version much code”表明这些代码可能是英文注释或说明...
在Java中,我们可以使用各种数据结构(如数组、链表、栈、队列、树和图等)来辅助实现这些算法。 1. **排序算法**:Java代码可能会包含常见的排序算法,如冒泡排序、插入排序、选择排序、快速排序、归并排序和堆...
`code_第四章`可能包含了使用某种编程语言(如C++、Java或Python)实现的队列和栈类的源代码。这些代码会展示如何创建类结构、定义成员变量以及实现上述的基本操作。 6. **性能分析**: - 栈和队列的时间复杂度...
"JAVA-GAME-SOURCE-CODE.rar" 提供了一个很好的学习资源,让初学者可以通过实际的代码来理解Java编程和游戏开发的基础知识。下面将详细探讨这个压缩包中可能包含的内容及其相关知识点。 1. **基础Java语法**:源...
Java的递归和队列可以用来实现这些算法。 本资料集中的"ch01"到"ch15"章节可能涵盖这些数据结构及其在Java中的实现,包括源代码示例,是学习和实践Java数据结构的理想资源。通过逐步阅读和实践,读者能够加深对数据...
- **数据结构和算法**:如数组、链表、栈和队列的应用,以及排序和查找算法。 - **事件处理和回调**:理解如何监听用户操作并做出相应。 - **错误处理和调试**:学习如何使用try-catch语句处理异常,并通过日志或...
"ch06 Code"和"ch10 Code"可能涵盖了队列和堆的概念。队列是先进先出(FIFO)的数据结构,适用于任务调度和消息传递。堆是一种特殊的树形数据结构,常用于优先级队列的实现,可以快速找到最大或最小的元素。 在...
4. **数据结构**:数组、链表、栈、队列、树和图等数据结构在解决复杂问题时扮演着重要角色。书中可能有对应的实现和使用示例。 5. **输入/输出**:Java的IO流系统允许程序读取和写入文件,进行网络通信等。学习...
在给定的“java_code_of_algorithms.rar”压缩包中,包含了多个Java代码实现的数据结构和算法,重点涉及了最小生成树(Minimum Spanning Tree, MST)、深度优先搜索(Depth First Search, DFS)以及其他的排序算法。...
通过阅读和理解这些代码,开发者可以深入学习编译器的工作原理,同时掌握Java编程技巧,例如处理字符串、构建数据结构(如栈和队列)、以及使用递归等。 此外,该项目还可以作为教育工具,帮助学生进行编译原理的...
在本资源"java实战项目code部分(15个项目)"中,您将获得一系列Java编程的实际应用案例,这些案例涵盖了不同的领域和功能,旨在帮助Java开发者提升实战技能和项目经验。15个项目的代码提供了丰富的学习材料,让我们...
8. **数据结构与算法**:理解并熟练运用数组、链表、栈、队列、树等数据结构,以及排序、查找等基础算法,能有效提高代码效率。 9. **日志管理**:如Log4j、Logback等,用于记录程序运行过程中的信息,便于调试和...
2. 数据结构与算法:Java提供了丰富的内置数据结构,如数组、链表、栈、队列、树等。学习如何选择合适的数据结构以及编写高效的算法是Java学习的重要部分。 3. 异常处理:Java中的异常处理是程序健壮性的重要组成...
`Evaluator.java`可能涉及到表达式求值或解析,这需要理解和使用栈或队列等数据结构。 3. **实用工具**:`wutil.jar`和`wnonstandard.jar`很可能是包含通用工具函数和类的库,比如字符串处理、数学运算、I/O操作等...
3. **标记管理**:存储和管理生成的标记,通常是通过一个队列或栈来实现。 4. **语法规则**:定义源代码的语法规则,这通常以文法的形式表示。 5. **解析**:根据语法规则,语法分析器将标记转换为AST,这个过程可能...
5. **数据结构和算法**:为了存储和管理聊天记录,开发者可能使用链表、队列、栈等数据结构,以及搜索、排序等算法。 6. **数据序列化**:如果需要将聊天记录持久化存储,Java的序列化机制可以将对象转化为可存储或...
CtCI涵盖了各种常见数据结构,如数组、链表、栈、队列、树(二叉树、平衡树如AVL和红黑树)、图等。理解它们的特性、操作时间复杂度以及如何在实际问题中应用是关键。例如,链表操作可以用于实现LRU缓存,二叉树可以...
- **数据结构和算法**:游戏逻辑可能涉及链表、队列、栈、图等数据结构,以及搜索、排序等算法。 通过对这个项目的源码进行研究,开发者可以学习如何在Java和Android环境中创建游戏,包括UI设计、游戏逻辑实现、...
8. **容器与算法**:书中可能包含了一些基本的数据结构和算法实现,如栈、队列、排序和搜索等。 9. **异常处理**:学习如何使用try-catch-finally语句来捕获和处理运行时错误,以及如何自定义异常。 10. **网络...