栈、队列、链表

来源:互联网 发布:宿舍床帘淘宝 编辑:程序博客网 时间:2024/06/03 20:29

特性: LIFO

public class StackApp {public static void main(String[] args) {Stack stack = new Stack(10);stack.push(10);stack.push(20);stack.push(40);stack.push(80);stack.push(100);while (!stack.isEmpty()){System.out.println(stack.pop()+" ");}}}class Stack{private int maxSize;private long[] stackArray;private int top;public Stack(int size){stackArray = new long[size];maxSize = size;top = -1;}public void push(long value){stackArray[++top] = value;}public long pop(){return stackArray[top--];}public boolean isEmpty(){return top == -1;}public boolean isFull(){return top == maxSize-1;}}


应用场景:

1. 程序运行时的栈空间,用来顺序存储局部变量和参数,每当函数被调用时,局部变量和方法参数会被“pushed into” stack,当方法returns,these locals and parameters are "popped".

2. Expression evaluation and syntax parsing

参考: http://en.wikipedia.org/wiki/Stack_(abstract_data_type)


队列

特点:FIFO

public class QueueApp {public static void main(String[] args) {Queue queue = new Queue(3);queue.insert(43);queue.insert(24);queue.remove();queue.insert(36);queue.insert(48);queue.insert(78);while(!queue.isEmpty()){System.out.println(queue.remove());}}}//循环队列class Queue {private int head;private int rear;private long[] queueArray;private int maxSize;private int size;//当前队列sizepublic Queue(int size){queueArray = new long[size];maxSize = size;head = 0;rear = 0;this.size = 0;}public void insert(long value){if (isFull()){System.out.println("Queue is already full");return;}queueArray[rear++] = value;if (rear == maxSize){rear = 0;}size++;}public long remove(){long temp = queueArray[head++];if (head == maxSize){head = 0;}size--;return temp;}public boolean isFull(){return size == maxSize;}public boolean isEmpty(){return size == 0;}public int size(){return size;}}

参考: http://en.wikipedia.org/wiki/Queue_%28abstract_data_type%29


链表

特点:插入、删除需要O(1),查询需要O(N)

基于Java的双向链表:
public class LinkedListApp {public static void main(String[] args) {DoubleLinkedList<String> list = new DoubleLinkedList<String>();list.add("one");list.add("two");list.add("three");list.removeFirst();list.display();}}class DoubleLinkedList<E>{private int size = 0;private Entry<E> header = new Entry<E>(null, null, null);public DoubleLinkedList(){header.next = header.previous = header;}public void add(E element){addBefore(element, header);}private void addBefore(E element, Entry<E> entry){Entry<E> newEntry = new Entry<E>(element, entry, entry.previous);newEntry.next.previous = newEntry;newEntry.previous.next = newEntry;size++;}public E removeFirst(){return remove(header.next);}public E removeLast(){return remove(header.previous);}public E remove(Entry<E> e){if (e.next == header) {throw new RuntimeException("List is empty");}e.previous.next = e.next ;e.next.previous = e.previous;e.next = e.previous = null;e.element = null;size--;return e.element;}public void display(){Entry<E> e = header.next;while (e.element != null){System.out.println(e.element);e = e.next;}}private static class Entry<E> {private E element;private Entry<E> next;private Entry<E> previous;private Entry(E element, Entry<E> next, Entry<E> previous){this.element = element;this.next = next;this.previous = previous;}}}


原创粉丝点击