Data structure basics - Java Implementation
- Stack & Queue Implementations
FixedCapacityQueue
package cn.edu.tsinghua.stat.mid_term; import java.util.Objects; /**
* Created by shuaiyi on 04/11/2017.
*/
public class FixedCapacityQueue<T> {
private int size;
private int head;
private int tail;
private T[] items; FixedCapacityQueue(int cap) {
this.size = cap;
this.head = this.tail = 0;
this.items = (T[]) new Object[cap];
} private void enqueue(T item) throws Exception {
if ((this.tail + 1) % this.size == this.head) {
throw new Exception();
} this.items[this.tail] = item;
this.tail = (this.tail + 1) % this.size;
} private T dequeue() throws Exception {
if (this.head >= this.size || this.head == this.tail) {
throw new Exception();
}
T node = this.items[this.head];
this.head = (this.head + 1) % this.size;
return node;
} public static void main(String[] args) throws Exception {
FixedCapacityQueue<String> queue = new FixedCapacityQueue<>(4);
String[] tstCases = new String[]{"Lydia", "Tina", "Alex"};
for (String s :
tstCases) {
queue.enqueue(s);
} queue.dequeue();
queue.enqueue("Bob"); String[] outputVerified = new String[tstCases.length];
outputVerified[0] = queue.dequeue();
outputVerified[1] = queue.dequeue();
outputVerified[2] = queue.dequeue(); tstCases = new String[]{"Tina", "Alex", "Bob"}; for (int i = 0; i < 3; ++i) {
if (Objects.equals(outputVerified[i], tstCases[i])) {
System.out.println("Test " + i + "#: succeeded");
} else {
System.out.println("Test " + i + "#: failed");
}
}
}
}
- FixedCapacityStack
package cn.edu.tsinghua.stat.mid_term; import java.util.Objects; /**
* Created by shuaiyi on 04/11/2017.
*/
public class FixedCapacityStack<T> {
private int size;
private int index;
private T[] items; FixedCapacityStack(int cap) {
this.size = cap;
this.index = 0;
this.items = (T[]) new Object[cap];
} private void push(T item) throws Exception {
if (this.index == this.size) {
throw new Exception();
} this.items[this.index++] = item;
} private T pop() throws Exception {
if (this.index == 0) {
throw new Exception();
} return this.items[--this.index];
} public static void main(String[] args) throws Exception {
FixedCapacityStack<String> stack = new FixedCapacityStack<>(3);
String[] tstCases = new String[]{"Lydia", "Tina", "Alex"};
for (String s :
tstCases) {
stack.push(s);
} String[] outputVerified = new String[tstCases.length];
outputVerified[0] = stack.pop();
outputVerified[1] = stack.pop();
outputVerified[2] = stack.pop(); for (int i = 0; i < 3; ++i) {
if (Objects.equals(outputVerified[i], tstCases[2 - i])) {
System.out.println("Test " + i + "#: succeeded");
} else {
System.out.println("Test " + i + "#: failed");
}
}
}
}
- ResizingArrayQueue
package cn.edu.tsinghua.stat.mid_term; import java.util.Objects; import static java.lang.Math.min; /**
* Created by shuaiyi on 04/11/2017.
*/
public class ResizingArrayQueue<T> {
private int size;
private int head;
private int tail;
private T[] items; ResizingArrayQueue(int cap) {
this.size = cap;
this.head = this.tail = 0;
this.items = (T[]) new Object[cap];
} private void resize(int newCapacity) {
T[] newItems = (T[]) new Object[newCapacity];
for (int i = 0; i < min(this.size, newCapacity); ++i) {
newItems[i] = this.items[i];
}
this.size = newCapacity;
this.items = newItems;
} private void enqueue(T item) throws Exception {
if (this.tail == this.size) {
resize(this.size * 2);
} this.items[this.tail++] = item;
} private T dequeue() throws Exception {
if (this.head >= this.size || this.head == this.tail) {
throw new Exception();
} int length = this.tail - this.head;
if (length * 4 <= this.size) {
for (int i = this.head; i < this.tail; ++i) {
this.items[i - this.head] = this.items[i];
}
resize(this.size / 2);
this.tail = this.tail - this.head;
this.head = 0;
} return this.items[this.head++];
} public static void main(String[] args) throws Exception {
ResizingArrayQueue<String> queue = new ResizingArrayQueue<>(3);
String[] tstCases = new String[]{"Lydia", "Tina", "Alex", "Lilith", "Bob"};
for (String s :
tstCases) {
queue.enqueue(s);
} queue.dequeue();
queue.dequeue();
queue.dequeue();
queue.dequeue();
queue.dequeue(); tstCases = new String[]{"Lydia", "Tina", "Alex", "Lilith", "Bob"};
for (String s :
tstCases) {
queue.enqueue(s);
} String[] outputVerified = new String[tstCases.length];
outputVerified[0] = queue.dequeue();
outputVerified[1] = queue.dequeue();
outputVerified[2] = queue.dequeue();
outputVerified[3] = queue.dequeue();
outputVerified[4] = queue.dequeue(); for (int i = 0; i < 5; ++i) {
if (Objects.equals(outputVerified[i], tstCases[i])) {
System.out.println("Test " + i + "#: succeeded");
} else {
System.out.println("Test " + i + "#: failed");
}
}
}
}
- ResizingArrayStack
package cn.edu.tsinghua.stat.mid_term; import java.util.Objects; import static java.lang.Math.min; /**
* Created by shuaiyi on 04/11/2017.
*/
public class ResizingArrayStack<T> {
private int size;
private int index;
private T[] items; ResizingArrayStack(int cap) {
this.size = cap;
this.index = 0;
this.items = (T[]) new Object[cap];
} private void resize(int newCapacity) {
T[] newItems = (T[]) new Object[newCapacity];
for (int i = 0; i < min(this.size, newCapacity); ++i) {
newItems[i] = this.items[i];
}
this.size = newCapacity;
this.items = newItems;
} private void push(T item) throws Exception {
if (this.index == this.size) {
resize(this.size * 2);
} this.items[this.index++] = item;
} private T pop() throws Exception {
if (this.index == 0) {
throw new Exception();
} if (this.index * 4 <= this.size) {
resize(this.size / 2);
} return this.items[--this.index];
} public static void main(String[] args) throws Exception {
ResizingArrayStack<String> stack = new ResizingArrayStack<>(5);
String[] tstCases = new String[]{"Lydia", "Tina", "Alex", "Bob", "Lilith"};
for (String s :
tstCases) {
stack.push(s);
} stack.pop();
stack.pop();
stack.pop();
stack.pop();
stack.pop(); tstCases = new String[]{"Lydia", "Tina", "Alex", "Bob", "Lilith"};
for (String s :
tstCases) {
stack.push(s);
} String[] outputVerified = new String[tstCases.length];
outputVerified[0] = stack.pop();
outputVerified[1] = stack.pop();
outputVerified[2] = stack.pop();
outputVerified[3] = stack.pop();
outputVerified[4] = stack.pop(); for (int i = 0; i < 5; ++i) {
if (Objects.equals(outputVerified[i], tstCases[4 - i])) {
System.out.println("Test " + i + "#: succeeded");
} else {
System.out.println("Test " + i + "#: failed");
}
}
}
}
- LinkedListQueue
package cn.edu.tsinghua.stat.mid_term; import java.util.Objects; /**
* Created by shuaiyi on 04/11/2017.
*/
public class LinkedListQueue<T> {
private class Node{
private T item;
private Node next; Node(T item, Node next) {
this.item = item;
this.next = next;
}
} private Node head;
private Node tail; LinkedListQueue() {
this.head = this.tail = null;
} private void enqueue(T item) {
Node newNode = new Node(item, null); if (this.tail == null) {
this.head = this.tail = newNode;
} else {
this.tail.next = newNode;
this.tail = newNode;
}
} private T dequeue() throws Exception {
if (this.head == null) {
throw new Exception();
} Node retNode = this.head;
this.head = this.head.next;
return retNode.item;
} public static void main(String[] args) throws Exception {
LinkedListQueue<String> queue = new LinkedListQueue<>();
String[] tstCases = new String[]{"Lydia", "Tina", "Alex"};
for (String s :
tstCases) {
queue.enqueue(s);
} String[] outputVerified = new String[tstCases.length];
outputVerified[0] = queue.dequeue();
outputVerified[1] = queue.dequeue();
outputVerified[2] = queue.dequeue(); for (int i = 0; i < 3; ++i) {
if (Objects.equals(outputVerified[i], tstCases[i])) {
System.out.println("Test " + i + "#: succeeded");
} else {
System.out.println("Test " + i + "#: failed");
}
}
}
}
- LinkedListStack
-
package cn.edu.tsinghua.stat.mid_term; import java.util.Objects; /**
* Created by shuaiyi on 04/11/2017.
*/
public class LinkedListStack<T> {
private class Node{
private T item;
private Node next; Node(T item, Node next) {
this.item = item;
this.next = next;
}
} private Node head; private void push(T item) {
this.head = new Node(item, this.head);
} private T pop() {
T value = this.head.item;
this.head = this.head.next;
return value;
} public static void main(String[] args) {
LinkedListStack<String> stack = new LinkedListStack<>();
String[] tstCases = new String[]{"Lydia", "Tina", "Alex"};
for (String s :
tstCases) {
stack.push(s);
} String[] outputVerified = new String[tstCases.length];
outputVerified[0] = stack.pop();
outputVerified[1] = stack.pop();
outputVerified[2] = stack.pop(); for (int i = 0; i < 3; ++i) {
if (Objects.equals(outputVerified[i], tstCases[2 - i])) {
System.out.println("Test " + i + "#: succeeded");
} else {
System.out.println("Test " + i + "#: failed");
}
}
}
}
-
- Basic Sorting Algorithm Implementations
package cn.edu.tsinghua.stat.mid_term; /**
* Created by shuaiyi on 04/11/2017.
*/
public class InsertionSort {
private void swap(Comparable[] a, int i, int j) {
Comparable tmp = a[i];
a[i] = a[j];
a[j] = tmp;
} private static boolean less(Comparable v, Comparable w) {
return v.compareTo(w) < 0;
} private void sort(Comparable[] a) {
for (int i = 1; i < a.length; ++i) {
for (int j = i; j > 0 && less(a[j], a[j - 1]); --j) {
swap(a, j, j - 1);
}
}
} public static void main(String[] args) {
InsertionSort insertionSort = new InsertionSort(); String[] a = new String[]{"54", "23", "98", "67", "12", "32", "23", "55", "98", "94"}; insertionSort.sort(a); for (String item :
a) {
System.out.print(item + ", ");
}
}
}InsertionSort
package cn.edu.tsinghua.stat.mid_term; import static java.lang.Math.min; /**
* Created by shuaiyi on 04/11/2017.
*/
public class SelectionSort { private void swap(Comparable[] a, int i, int j) {
Comparable tmp = a[i];
a[i] = a[j];
a[j] = tmp;
} private void sort(Comparable[] a) {
int i, j;
for (i = 0; i < a.length; ++i) {
int curMinIndex = i;
for (j = i + 1; j < a.length; ++j) {
if (less(a[j], a[curMinIndex])) {
curMinIndex = j;
}
} if (curMinIndex != i) {
swap(a, i, curMinIndex);
}
}
} private static boolean less(Comparable v, Comparable w) {
return v.compareTo(w) < 0;
} public static void main(String[] args) {
SelectionSort selectionSort = new SelectionSort(); String[] a = new String[]{"54", "23", "98", "67", "12", "32", "23", "55", "98", "94"}; selectionSort.sort(a); for (String item :
a) {
System.out.print(item + ", ");
}
} }SelectionSort
package cn.edu.tsinghua.stat.mid_term; /**
* Created by shuaiyi on 04/11/2017.
*/
public class MergeSort { private Comparable[] aux; public MergeSort(int cap) {
aux = new Comparable[cap];
} private void swap(Comparable[] a, int i, int j) {
Comparable tmp = a[i];
a[i] = a[j];
a[j] = tmp;
} private static boolean less(Comparable v, Comparable w) {
return v.compareTo(w) < 0;
} private void sort(Comparable[] a) {
sort(a, 0, a.length - 1);
} private void sort(Comparable[] a, int low, int high) {
if (low >= high) {
return;
}
int mid = (low + high) / 2;
sort(a, low, mid);
sort(a, mid + 1, high);
merge(a, low, high);
} private void merge(Comparable[] a, int low, int high) {
int mid = (low + high) / 2;
int lft_index = low;
int right_index = mid + 1; for (int k = low; k <= high; ++k) {
this.aux[k] = a[k];
} int flag = lft_index;
while(lft_index <= mid && right_index <= high) {
if (less(this.aux[lft_index], this.aux[right_index])) {
a[flag++] = this.aux[lft_index++];
} else {
a[flag++] = this.aux[right_index++];
}
} while(lft_index <= mid) {
a[flag++] = this.aux[lft_index++];
} while(right_index <= high) {
a[flag++] = this.aux[right_index++];
}
} private void officialMerge(Comparable[] a, int low, int high) {
int mid = (low + high) / 2;
int i = low;
int j = mid + 1; for (int k = low; k <= high; ++k) {
this.aux[k] = a[k];
} for (int k = low; k <= high; ++k) {
if (i > mid) {
a[k] = this.aux[j++];
} else if (j > high) {
a[k] = this.aux[i++];
} else if (less(this.aux[j], this.aux[i])) {
a[k] = this.aux[j++];
} else {
a[k] = this.aux[i++];
}
}
} public static void main(String[] args) { String[] a = new String[]{"8", "3", "1", "4", "6", "5", "9", "7", "2", "0"}; MergeSort mergeSort = new MergeSort(a.length); mergeSort.sort(a); for (String item :
a) {
System.out.print(item + ", ");
}
}
}MergeSort
package cn.edu.tsinghua.stat.mid_term; /**
* Created by shuaiyi on 04/11/2017.
*/
public class QuickSort {
private void swap(Comparable[] a, int i, int j) {
Comparable tmp = a[i];
a[i] = a[j];
a[j] = tmp;
} private static boolean less(Comparable v, Comparable w) {
return v.compareTo(w) < 0;
} private void sort(Comparable[] a) {
sort(a, 0, a.length - 1);
} private void sort(Comparable[] a, int lft, int rht) {
if (lft >= rht) {
return;
}
int mid = partition(a, lft, rht);
sort(a, lft, mid);
sort(a, mid + 1, rht);
} private int partition(Comparable[] a, int lft, int rht) {
int mid = (lft + rht) / 2;
int cnt = 0;
for (int k = lft; k <= rht; ++k) {
if (less(a[k], a[mid])) {
++cnt;
}
} if (cnt + lft != mid) {
swap(a, cnt + lft, mid);
} mid = cnt + lft;
int less_index = lft;
int more_index = mid + 1;
while (less_index < mid && more_index <= rht) {
if (less(a[less_index], a[mid])) {
less_index++;
} else{
swap(a, less_index, more_index);
more_index++;
}
} return mid;
} private int officalPartition(Comparable[] a, int lo, int hi) {
int i = lo, j = hi + 1;
Comparable v = a[lo];
while (true) {
while (less(a[++i], v)) if (i == hi) break;
while (less(v, a[--j])) if (j == lo) break;
if (i >= j) break;
swap(a, i, j);
} swap(a, lo, j);
return j;
} public static void main(String[] args) { String[] a = new String[]{"8", "3", "1", "4", "6", "5", "9", "7", "2", "0"}; QuickSort quickSort = new QuickSort(); quickSort.sort(a); for (String item :
a) {
System.out.print(item + ", ");
}
}
}QuickSort
package cn.edu.tsinghua.stat.mid_term; /**
* Created by shuaiyi on 04/11/2017.
*/
public class MaxPQ<T extends Comparable<T>> { private int N = 0;
private T[] pq; MaxPQ(int cap) {
this.pq = (T[]) new Comparable[cap + 1];
} public void insert(T item) {
this.pq[++N] = item;
swim(N);
} public T delMax() {
T maxNode = this.pq[1];
swap(this.pq, 1, N);
this.pq[N] = null;
N--;
sink(1);
return maxNode;
} public void swap(Comparable[] a, int i, int j) {
Comparable tmp = a[i];
a[i] = a[j];
a[j] = tmp;
} public static boolean less(Comparable v, Comparable w) {
return v.compareTo(w) < 0;
} public void swim(int k) {
while(k > 1 && less(this.pq[k / 2], this.pq[k])) {
swap(this.pq, k/2, k);
k /= 2;
}
} public void sink(int k) {
while(k * 2 <= N) {
int child = k * 2;
if (child + 1 <= N && less(this.pq[child], this.pq[child + 1])) {
child = k * 2 + 1;
}
if (less(this.pq[k], this.pq[child])) {
swap(this.pq, k, child);
k = child;
} else {
break;
}
}
} public void officialSink(int k) {
while(2 * k <=N) {
int j = 2 * k;
if (j < N && less(pq[j], pq[j + 1])) j++;
if (!less(pq[k], pq[j])) break;
swap(pq, k, j);
k = j;
}
} public String[] sort() {
String[] res = new String[this.N];
int flag = 0;
while (N > 0) {
res[flag++] = (String)delMax();
}
return res;
} public static void main(String[] args) { String[] a = new String[]{"8", "3", "1", "4", "6", "5", "9", "7", "2", "0"}; MaxPQ<String> maxPQ = new MaxPQ<>(a.length); for (String s :
a) {
maxPQ.insert(s);
} String[]b = maxPQ.sort(); for (String item :
b) {
System.out.print(item + ", ");
}
}
}MaxPQ
Data structure basics - Java Implementation的更多相关文章
- Implementing the skip list data structure in java --reference
reference:http://www.mathcs.emory.edu/~cheung/Courses/323/Syllabus/Map/skip-list-impl.html The link ...
- [Data Structure] Linked List Implementation in Python
class Empty(Exception): pass class Linklist: class _Node: # Nonpublic class for storing a linked nod ...
- Java for LeetCode 211 Add and Search Word - Data structure design
Design a data structure that supports the following two operations: void addWord(word)bool search(wo ...
- ✡ leetcode 170. Two Sum III - Data structure design 设计two sum模式 --------- java
Design and implement a TwoSum class. It should support the following operations: add and find. add - ...
- LeetCode Two Sum III - Data structure design
原题链接在这里:https://leetcode.com/problems/two-sum-iii-data-structure-design/ 题目: Design and implement a ...
- hdu-5929 Basic Data Structure(双端队列+模拟)
题目链接: Basic Data Structure Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
- LeetCode 笔记27 Two Sum III - Data structure design
Design and implement a TwoSum class. It should support the following operations: add and find. add - ...
- Summary: Trie Data Structure
Implement a Trie Data Structure, and search() & insert() function: we need to implement both Cla ...
- HDU 5929 Basic Data Structure 模拟
Basic Data Structure Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
随机推荐
- 1 django
1.MVC 大部分开发语言中都有MVC框架 MVC框架的核心思想是:解耦 降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用 m表示model,主要用于对数据库层的封装 v ...
- Sentry 错误监控
错误监控:https://sentry.io 支持语言或平台:
- 转行自学 Java 之路的纪念册
前言: 最近在重读<小狗钱钱>,我对其中的"成功日记"概念特别深刻,偶尔也会记一记“成功日记”. 想了想人生走找到今天,阶段性“成功日记”有没有呢? 有的!几年前的一篇 ...
- MFC深入浅出读书笔记第一部分
最近看侯捷的MFC深入浅出,简单总结一下. 第一章首先就是先了解一下windows程序设计的基础知识,包括win32程序开发基础,什么*.lib,*.h,*.cpp的,程序入口点WinMain函数,窗 ...
- 更改 Mac 上的功能键行为
您可以将 Apple 键盘上的顶行按键用作标准功能键,或用来控制 Mac 的内建功能. 如果您的 Apple 键盘部分顶行按键上印有图标,则这些按键可用于执行每个图标所示的特殊功能.这些按键也可用 ...
- Python数据分析基础——读写CSV文件
1.基础python代码: #!/usr/bin/env python3 # 可以使脚本在不同的操作系统之间具有可移植性 import sys # 导入python的内置sys模块,使得在命令行中向脚 ...
- Leetcode 552.学生出勤记录II
学生出勤记录II 给定一个正整数 n,返回长度为 n 的所有可被视为可奖励的出勤记录的数量. 答案可能非常大,你只需返回结果mod 109 + 7的值. 学生出勤记录是只包含以下三个字符的字符串: ' ...
- allocator class
当分配一大块内存时,我们通常计划在这块内存上按需构造对象,这样的我们希望将内存分配和对象构造分离.但是通常的new关键字的分配的动态空间,有时候会造成一些浪费,更致命的是“如果一个类没有默认构造函数, ...
- 习题:最短路计数(SPFA最短路计数)
最短路计数(洛谷1144)题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条.输入输出格式输入格式:输入第一行包含2个正整数N,M,为图的顶点数 ...
- 【bzoj3834】[Poi2014]Solar Panels 数论
题目描述 Having decided to invest in renewable energy, Byteasar started a solar panels factory. It appea ...