`
jayghost
  • 浏览: 441957 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java实现Stack、Queue、BinaryTree

    博客分类:
  • Java
 
阅读更多
1、用数组实现Stack:
public class MyStack {
	private int maxSize;
	private Integer[] array;
	private int top;

	public MyStack(int maxSize) {
		this.maxSize = maxSize;
		this.array = new Integer[maxSize];
		this.top = -1;
	}

	public void push(int item) {
		if (isFull()) {
			System.out.println("Stack is full");
		} else {
			array[++top] = item;
		}
	}

	public Integer peek() {
		if (isEmpty()) {
			System.out.println("Stack is empty");
			return null;
		} else {
			return array[top];
		}
	}

	public Integer pop() {
		if (isEmpty()) {
			System.out.println("Stack is empty");
			return null;
		} else {
			return array[top--];
		}
	}

	public boolean isEmpty() {
		return top == -1;
	}

	public boolean isFull() {
		return top == maxSize - 1;
	}

	public static void main(String[] args) {
		MyStack myStack = new MyStack(10);
		myStack.push(1);
		myStack.push(3);
		System.out.println("peek: " + myStack.peek());
		myStack.push(5);
		System.out.println("pop: " + myStack.pop());
		System.out.println("peek: " + myStack.peek());
		myStack.push(6);
		System.out.println("peek: " + myStack.peek());
		System.out.println("pop: " + myStack.pop());
		System.out.println("pop: " + myStack.pop());
		System.out.println("pop: " + myStack.pop());
		System.out.println("pop: " + myStack.pop());
	}
}


2、用数组实现Queue:
public class MyQueue {
	private int maxSize;
	private Integer[] array;
	private int front;
	private int rear;
	private int itemCount;

	public MyQueue(int maxSize) {
		this.maxSize = maxSize;
		this.array = new Integer[maxSize];
		this.front = 0;
		this.rear = -1;
		this.itemCount = 0;
	}

	public void insert(int item) {
		if (isFull()) {
			System.out.println("Queue is full");
		} else {
			if (rear == maxSize - 1) {
				rear = -1;
			}
			array[++rear] = item;
			itemCount++;
		}
	}

	public Integer remove() {
		if (isEmpty()) {
			System.out.println("Queue is empty");
			return null;
		} else {
			int temp = array[front++];
			if (front == maxSize) {
				front = 0;
			}
			itemCount--;
			return temp;
		}
	}

	public Integer peek() {
		if (isEmpty()) {
			System.out.println("Queue is empty");
			return null;
		} else {
			return array[front];
		}
	}

	public boolean isEmpty() {
		return itemCount == 0;
	}

	public boolean isFull() {
		return itemCount == maxSize;
	}

	public static void main(String[] args) {
		MyQueue myQueue = new MyQueue(5);
		myQueue.insert(1);
		myQueue.insert(2);
		myQueue.insert(3);
		myQueue.insert(4);
		myQueue.insert(5);
		myQueue.insert(6);
		System.out.println("peek: " + myQueue.peek());
		myQueue.insert(5);
		System.out.println("remove: " + myQueue.remove());
		System.out.println("peek: " + myQueue.peek());
		myQueue.insert(6);
		System.out.println("peek: " + myQueue.peek());
		System.out.println("remove: " + myQueue.remove());
		System.out.println("remove: " + myQueue.remove());
		System.out.println("peek: " + myQueue.peek());
		System.out.println("remove: " + myQueue.remove());
		System.out.println("remove: " + myQueue.remove());
	}
}


3、递归实现BinaryTree:
public class MyBinaryTree {

	private static class Node {
		int data;
		Node left;
		Node right;

		public Node(int data) {
			this.data = data;
			this.left = null;
			this.right = null;
		}
	}

	public Node root;

	public MyBinaryTree() {
		root = null;
	}

	private Node insert(Node node, int data) {
		if (node == null) {
			node = new Node(data);
		} else {
			if (data <= node.data) {
				node.left = insert(node.left, data);
			} else {
				node.right = insert(node.right, data);
			}
		}
		return node;
	}

	public void insert(int data) {
		root = insert(root, data);
	}

	public void insert(int[] data) {
		for (int i : data) {
			insert(i);
		}
	}

	public void preOrder(Node node) {
		if (node == null) {
			return;
		}
		System.out.println(node.data);
		preOrder(node.left);
		preOrder(node.right);
	}

	public void inOrder(Node node) {
		if (node == null) {
			return;
		}
		preOrder(node.left);
		System.out.println(node.data);
		preOrder(node.right);
	}

	public void postOrder(Node node) {
		if (node == null) {
			return;
		}
		preOrder(node.left);
		preOrder(node.right);
		System.out.println(node.data);
	}

	public static void main(String[] args) {
		MyBinaryTree binaryTree = new MyBinaryTree();
		int[] data = { 4, 8, 7, 2, 9, 3, 1, 6, 5 };
		binaryTree.insert(data);
		System.out.println("preOrder:");
		binaryTree.preOrder(binaryTree.root);
		System.out.println("inOrder:");
		binaryTree.inOrder(binaryTree.root);
		System.out.println("postOrder:");
		binaryTree.postOrder(binaryTree.root);
	}
}

分享到:
评论

相关推荐

    心希盼 C++ STL binaryTree

    对于“心希盼 binaryTree.doc”文档,很可能是对这种使用STL实现二叉树的详细教程或示例代码,可能涵盖了如何构建二叉树、执行各种操作以及解决实际问题的实例。通过阅读和理解这份文档,开发者能够深入理解如何结合...

    Java 的 LinkedList 设计.zip

    LinkedList 设计java数据结构与算法系列文章目录(持续更新)java数据结构...Stack)设计与实现java数据结构与算法之队列(Queue)设计与实现java数据结构与算法之梯度思维(让我们更通俗地理解梯度)java数据结构与算法之树...

    Java超详细!Java实现数据结构PPT课件

    二叉树(BinaryTree)、二叉搜索树(BinarySearchTree、BST) 平衡二叉搜索树(BalancedBinarySearchTree、BBST) AVL树(AVLTree)、红黑树(RebBlackTree) B树(B-Tree) 集合(TreeSet)、映射(TreeMap) ...

    数据结构的原理及其java实现

    例如,二叉搜索树(Binary Search Tree)可以用于快速查找、插入和删除元素。 ```java class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int val) { this.val = val; } } ``` 六、堆 堆...

    数据结构Java版本.pdf

    根据提供的文件标题“数据结构Java版本.pdf”及描述“适合热爱学习...同时,掌握这些数据结构的Java实现方式对于进行软件开发具有重要意义。希望这份资料能够帮助到所有热爱Java编程的朋友,在学习的道路上更进一步。

    常用数据结构java实现

    了解和熟练掌握这些数据结构及其Java实现对于提升编程技能和解决实际问题至关重要。通过实践和不断学习,我们可以更有效地设计和优化算法,从而提高程序的性能和效率。在实际项目中,选择合适的数据结构往往能显著...

    经典算法问题的java实现<一>

    8. **数据结构**:如栈(Stack)、队列(Queue)、链表(Linked List)、树(Tree)和图(Graph)等,它们是实现这些算法的基础。 在这个Java实现的压缩包中,`TypicalCode.java`很可能是包含一个或多个以上算法的...

    前端大厂最新面试题-stack.docx

    9. 二叉树的中序遍历(Inorder Traversal of a Binary Tree):给定一个二叉树,使用栈来实现中序遍历。难度:中等 10. 二叉树的前序遍历(Preorder Traversal of a Binary Tree):给定一个二叉树,使用栈来实现...

    Java版数据结构代码,栈,动态数组,队列,链表,二叉树

    5. **二叉树(Binary Tree)**:二叉树是每个节点最多有两个子节点的数据结构,分为左子节点和右子节点。常见的二叉树类型有二叉搜索树、平衡二叉树(如AVL树和红黑树)等。二叉树在排序、查找、插入和删除操作中有...

    java数据结构源码

    3. **栈**(Stack):栈是一种后进先出(LIFO)的数据结构,Java中的java.util.Stack类提供了push、pop、peek等方法来实现栈的操作。栈在递归、回溯算法和表达式求解等方面有广泛应用。 4. **队列**(Queue):队列...

    基于Python实现基础数据结构.pdf

    在Python中,虽然我们有丰富的内置数据结构,如列表、字典、集合和...下面我们将实现一些常见的基础数据结构,包括栈(Stack)、队列(Queue)、链表(Linked List)、哈希表(Hash Table)和二叉树(Binary Tree)。

    java的数据结构简单演示系统

    系统中可能包含了上述数据结构的Java实现代码,以及一个名为“image”的文件夹,里面可能包含运行程序时需要的图片资源,如数据结构的可视化展示图。为了正确运行该系统,用户需要确保“image”文件夹位于D盘根目录...

    李春葆数据结构书上各算法实现

    《李春葆数据结构书上各算法实现》这个资源包含了数据结构领域中多个核心概念的C语言实现,根据文件名称,我们可以看到涉及了图(Grah.h)、二叉树(BinaryTree_YunSuan.h)、线性表(Linear_List_All.h)、栈与队列...

    java数据结构代码

    Java中的树结构包括二叉树(如BinaryTree)、红黑树(TreeMap的实现)和AVL树等。 在Java中,`java.util`包提供了对这些数据结构的支持,例如ArrayList、LinkedList、Stack、Queue等。同时,`java.util.concurrent`...

    data structures with java source code

    8. **二叉树(Binary Tree)**:二叉树是一种每个节点最多有两个子节点的树结构。Java中的TreeSet和TreeMap类利用红黑树(一种自平衡的二叉查找树)来实现高效的操作。 9. **图(Graph)**:图由节点和边构成,用于...

    java---数据结构

    Java中的基本数据结构包括数组(Array)、链表(LinkedList)、栈(Stack)、队列(Queue)等。数组是最基础的结构,它提供了一种按索引访问元素的方法,但插入和删除操作效率较低。链表解决了数组在动态扩展时的...

    数据结构常用算法c++实现

    Binary search tree Dynamic order statistics Red-black tree Interval tree Prefix Tree(Trie) *Suffix Tree(未实现)* B-Tree Hash by multiplication Hash table Universal hash function Perfect hash Java's ...

    Java算法题,数据结构分析和实现.zip

    8. **树(Tree)**:二叉树是一种重要的数据结构,如二叉搜索树(Binary Search Tree,BST)能够支持快速的查找、插入和删除操作。Java的`java.util.TreeSet`和`java.util.TreeMap`基于红黑树实现。 9. **图(Graph...

    JAVA版本的数据结构与算法.zip

    在这个"JAVA版本的数据结构与算法.zip"中,"data-structures-and-abstraction-with-java-master"可能是一个源代码仓库,包含了各种数据结构和算法的Java实现。学习者可以通过阅读和运行这些代码,加深对数据结构和...

Global site tag (gtag.js) - Google Analytics