java实现堆栈、哈希表、链表
来源:互联网 发布:人工智能读心术 小冰 编辑:程序博客网 时间:2024/06/06 02:40
//堆栈实现的代码
package traverse;public class Stack {Object[] data;//数据int maxSize;//栈的最大容量int top;//顶点public Stack(int maxSize){this.maxSize=maxSize;data=new Object[maxSize];top=-1;}public int getSize(){return maxSize;}public int getElementCount(){return top;}public boolean isEmpty(){return top==-1;}public boolean isFull(){return top+1==maxSize;}public boolean push(Object data){if(isFull()){System.out.println("栈已满!");return false;}this.data[++top]=data;return true;}public Object pop()throws Exception{if(isEmpty()){throw new Exception("栈已空!");}return this.data[top--];}public Object peek(){return this.data[getElementCount()];}}
二叉树实现代码:
package traverse;public class BinaryTree {private Node root;private static class Node {Node left;Node right;int data;Node(int newData) {left = null;right = null;data = newData;}}/** * 创建一个空的二叉树 */public BinaryTree() {root = null;}/** * 递归的插入数值 * data要插入的数值 */public void insert(int data) {root = insert(root, data);}/** * 将数值插入到二叉树中,比当前结点小或等于当前结点的插在当前结点的左侧,比当前结点大的数插在当前结点的右侧,每次从根结点开始递归比较 * node当前的结点,就是根结点,只是每次根结点的左右子孙更新 * data要插入的数值 * 新排好的二叉树 */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);}/** * 将数值输入构建二叉树 * data要输入的数值 */public void buildTree(int[] data) {for (int i = 0; i < data.length; i++) {insert(data[i]);}}/** * 递归打印出二叉树 */public void printTree() {printTree(root);System.out.println();}/** * 从根结点开始遍历,从树的最高层叶子结点开始输出,从左至右 * node当前的结点 */private void printTree(Node node) {if (node == null)return;// left, node itself, rightprintTree(node.left);System.out.print(node.data + " ");printTree(node.right);}}
哈希表代码:
package traverse;public class HashTable{ private String[] name; //关键字 private int sum; //容量 public HashTable(){ //初始化,初始容量是10个 name = new String[10]; sum = 0; } public int hash1(String s){ //哈希函数 return Math.abs(s.hashCode())%name.length; } public int hash2(String s){ //处理冲突的哈希函数 int result = Math.abs(s.hashCode())%(name.length-1); System.out.println(s+"--"+result); if(result%2==0){ return result + 1; } return result; } public boolean contains(String s){ //哈希表里面是否包含字符串s int start = hash1(s); int i = start; while (name[i] != null){ if(name[i].equals(s)){ return true; } i = (i + hash2(s))%name.length; if(i == start){ return false; } } return false; } public void add(String s){ if(sum>=name.length/2){ this.rehash(); } int start = hash1(s); int i = start; while(name[i] != null){ if(s.equals(name[i])){ return; } i = (i + hash2(s))%name.length; if(i == start){ return; } } name[i] = s; sum ++; } public void rehash(){ //扩建一个哈希表为原表的两倍,把原来的哈希表添加到新表中 HashTable ht = new HashTable(); ht.name = new String[this.name.length * 2]; for(int i = 0; i < this.name.length; i ++){ if((this.name[i] != null)){ ht.add(this.name[i]); } } this.name = ht.name; this.sum = ht.sum; } public void remove(String s){ //删除某个元素 if(this.contains(s)){ int i = this.getValue(s); this.name[i] = null; } } public int getValue(String s){ //得到s在哈希表中的位置 int start = this.hash1(s); int i = start; while(this.name[i] != null){ if(this.name[i].equals(s)){ return i; } i = (i + this.hash2(s))%this.name.length; if(i == start){ return -1; } } return -1; } public void print(){ //输出哈希表中所有元素 for(int i = 0; i < name.length; i ++){ System.out.println(i+":"+name[i]); } }public int size(){ //哈希表存储元素的个数 return this.sum; }public int length(){ //哈希表的长度 return this.name.length; }}
主函数遍历:
package traverse;import traverse.BinaryTree;import traverse.Stack;import traverse.HashTable;public class traverse {public static void main(String[] args) throws Exception { BinaryTree tree=new BinaryTree(); int[] data = { 2, 8, 7, 4 ,9,3,1,6,7,5}; tree.buildTree(data); tree.printTree(); HashTable table = new HashTable(); table.add("one"); table.add("two"); table.add("three"); table.add("four"); table.add("fve"); table.add("six"); System.out.println(table.contains("two")); table.remove("six"); System.out.println(table.contains("six")); table.print(); Stack stack=new Stack(100); stack.push(new String("1")); stack.push(new String("2")); stack.push(new String("3")); stack.push(new String("4")); stack.push(new String("5")); while(!stack.isEmpty()) { System.out.print(stack.peek()); stack.pop(); }}}
- java实现堆栈、哈希表、链表
- java 实现 堆栈
- java实现堆栈
- Java代码实现堆栈
- java实现堆栈
- Java堆栈实现
- Java堆栈简单实现
- 堆栈java实现及应用
- Java实现堆栈小应用
- Java 实现堆栈和队列
- Java底层堆栈的实现
- android java 堆栈的实现
- Java堆栈算法的实现
- Java链表实现堆栈
- Java实现堆栈(list实现)
- Java数据结构之堆栈-使用数组实现堆栈
- 堆栈的实现(LIFO、链表)
- 用JAVA实现堆栈(数组篇)
- 如果让我重做一次研究生--王泛森院士
- Oracl_day1(连接查询)
- NVelocity的使用
- socket编程
- 张小龙:APP产品经理必须要懂的30条原则
- java实现堆栈、哈希表、链表
- C# 基础概念之延迟加载 Lazy<T>
- 玩一玩接口
- css注释和html注释用法及应用范围介绍
- python 字符串处理
- Java修饰符总结
- linux c typeof创建结构体元素类型用法
- 使用boch仿真器在x86 PC平台上搭建Linux0.11系统环境(windows下)
- 统计学生课程平均分的程序