diff --git a/ArrayQueue.java b/ArrayQueue.java new file mode 100644 index 0000000000000000000000000000000000000000..f0de56bc088ae518af9c262c7739dbda54a6562d --- /dev/null +++ b/ArrayQueue.java @@ -0,0 +1,66 @@ +public class ArrayQueue { + // 先进先出 + private Object[] array; + private int rear = 0; + + ArrayQueue(int length) { + array = new Object[length]; + } + + //插入 + public void add(A item) { + if (item == null) { + System.out.println("插入失败:元素不能为空"); + return; + } + try { + array[rear] = item; + rear++;//成功后自增 + } catch (Exception e) { + System.out.println("插入失败,队列已满"); + } + } + + //移除头部元素 + public A remove() { + if (isEmpty()) { + System.out.println("无元素"); + return null; + } + try { + int i = 0; + A a = (A) array[0]; + for (int j = 0; j < rear - 1; j++) { + array[j] = array[j + 1]; + i++; + } + rear = i; + return a; + } catch (Exception e) { + System.out.println("移除失败"); + } + return null; + + } + + // 获取头部元素 + public A peek() { + if (isEmpty()) { + System.out.println("无元素"); + return null; + } + A a = (A) array[0]; + return a; + } + + public int size() { + return rear; + } + + public boolean isEmpty() { + if (rear == 0) { + return true; + } + return false; + } +} diff --git a/ArrayStack.java b/ArrayStack.java new file mode 100644 index 0000000000000000000000000000000000000000..70951be44358af672f4606da3e30aa2a69cf62da --- /dev/null +++ b/ArrayStack.java @@ -0,0 +1,62 @@ +public class ArrayStack { + private Object[] stack; + private int topPointer;//栈顶指针 + + // 数组现实的栈 + public ArrayStack(int length) { stack = new Object[length]; + } + + // 入栈 + public void push(A a) { + if (a == null) { + System.out.println("插入失败:元素不能为空"); + return; + } + try { + stack[topPointer] = a; + ++topPointer;//成功后自增 + } catch (Exception e) { + System.out.println("插入失败,栈已满"); + } + } + + // 出栈 + public A pop() { + if (isEmpty()) { + return null; + } + try { + A a = (A) stack[topPointer - 1]; + stack[topPointer - 1] = null;//取出元素后清空 + topPointer--;//成功后 + return a; + } catch (Exception e) { + System.out.println("出栈失败,栈已空"); + } + return null; + } + + //查看栈顶元素 + public A peek() { + if (isEmpty()) { + return null; + } + try { + return (A) stack[topPointer - 1]; + } catch (Exception e) { + System.out.println("查看失败,栈已空"); + } + return null; + } + + public int size() { + return topPointer; + } + + public boolean isEmpty() { + if (topPointer == 0) { + return true; + } + return false; + } +} diff --git a/LinkedList.java b/LinkedList.java new file mode 100644 index 0000000000000000000000000000000000000000..112183c2705cf6b5aefaece0add8fa26860560dc --- /dev/null +++ b/LinkedList.java @@ -0,0 +1,52 @@ +public class LinkedList { + private P head, tail; + private int size = 0; + + public int getSize() { + return size; + } + + public void addToFront(B value) { + P node = new P(value); + if (head == null) { + head = node; + tail = head; + } else { + node.next = head; + head = node; + } + size++; + } + + public void addToRear(B value) { + P node = new P(value); + if (tail == null) { + tail = node; + head = tail; + } else { + tail.next = node; + tail = node; + } + size++; + } + + + //删除头部节点 + public B delTopNode() { + if (head == null) { + return null; + } + B value = (B) head.value; + head = head.next;//删除头节点 + size--; + return value; + } + + //查看头部节点 + public B inquiryTopNode() { + if (head == null) { + return null; + } + return (B) head.value; + } +} diff --git a/LinkedListQueue.java b/LinkedListQueue.java new file mode 100644 index 0000000000000000000000000000000000000000..5a14b6d8815aacb13d4de4c8ccfc85e24b11855f --- /dev/null +++ b/LinkedListQueue.java @@ -0,0 +1,49 @@ +public class LinkedListQueue { + private LinkedList myLinkedList = new LinkedList<>(); + private int size; + + //插入 + public void add(B item) { + myLinkedList.addToRear(item); + size++; + } + + + //移除头部元素 + public B remove() { + if (isEmpty()) { + System.out.println("无元素"); + return null; + } + try { + B b = myLinkedList.delTopNode(); + size--; + return b; + } catch (Exception e) { + System.out.println("移除失败"); + } + return null; + + } + + // 获取头部元素 + public B peek() { + if (isEmpty()) { + System.out.println("无元素"); + return null; + } + B b = myLinkedList.inquiryTopNode(); + return b; + } + + public int size() { + return size; + } + + public boolean isEmpty() { + if (size == 0) { + return true; + } + return false; + } +} diff --git a/LinkedListStack.java b/LinkedListStack.java new file mode 100644 index 0000000000000000000000000000000000000000..3e9c8cbe1ab988ff6229d2eea515d5a901bef678 --- /dev/null +++ b/LinkedListStack.java @@ -0,0 +1,46 @@ +public class LinkedListStack { + //栈顶即为链表头部元素 + + private LinkedList myLinkedList = new LinkedList<>(); + private int size=0; + + // 入栈(插入到链表头部) + public void push(B value) { + if (value==null){ + System.out.println("插入失败:元素不能为空"); + return; + } + myLinkedList.addToFront(value); + size++; + } + + // 出栈(从链表头部取出) + public B pop() { + if(isEmpty()){ + return null; + } + B b = myLinkedList.delTopNode(); + size--; + return b; + } + + //查看栈顶元素 + public B peek() { + if(isEmpty()){ + return null; + } + B b = myLinkedList.inquiryTopNode(); + return b; + } + + public int size() { + return this.size; + } + + public boolean isEmpty() { + if (this.size == 0) { + return true; + } + return false; + } +} diff --git a/Main.java b/Main.java new file mode 100644 index 0000000000000000000000000000000000000000..4e7fd5769bf616da0ef101e0ad909448a953d0e1 --- /dev/null +++ b/Main.java @@ -0,0 +1,71 @@ +public class Main { + public static void main(String[] args) { + System.out.println("基础部分"); + System.out.println("1.用数组实现栈*********************************************"); + ArrayStack arrayStack = new ArrayStack(3); + System.out.println("栈是否为空" + arrayStack.isEmpty()); + arrayStack.push("a"); + arrayStack.push("b"); + arrayStack.push(null); + arrayStack.push("d"); + System.out.println("查看栈顶元素" + arrayStack.peek()); + System.out.println("出栈" + arrayStack.pop()); + System.out.println("查看栈顶元素" + arrayStack.peek()); + System.out.println("栈内元素个数:" + arrayStack.size() + "个"); + System.out.println("栈是否为空" + arrayStack.isEmpty()); + + System.out.println(); + System.out.println(); + + System.out.println("2.用带尾指针的链表实现栈************************************"); + LinkedListStack linkedListStack = new LinkedListStack<>(); + System.out.println("栈是否为空" + linkedListStack.isEmpty()); + linkedListStack.push("a"); + linkedListStack.push("b"); + linkedListStack.push(null); + linkedListStack.push("d"); + System.out.println("查看栈顶元素" + linkedListStack.peek()); + System.out.println("出栈" + linkedListStack.pop()); + System.out.println("查看栈顶元素" + linkedListStack.peek()); + System.out.println("栈内元素个数:" + linkedListStack.size() + "个"); + System.out.println("栈是否为空" + linkedListStack.isEmpty()); + + System.out.println(); + System.out.println(); + + System.out.println("3.用数组实现队列*******************************************"); + ArrayQueue arrayQueue = new ArrayQueue<>(4); + System.out.println("队列是否为空" + arrayQueue.isEmpty()); + arrayQueue.add("a"); + arrayQueue.add("b"); + arrayQueue.add("c"); + arrayQueue.add("d"); + System.out.println("查看队列头部元素" + arrayQueue.peek()); + System.out.println("移除头部元素" + arrayQueue.remove()); + System.out.println("查看队列头部元素" + arrayQueue.peek()); + System.out.println("队列元素个数:" + arrayQueue.size() + "个"); + System.out.println("队列是否为空" + arrayQueue.isEmpty()); + + System.out.println(); + System.out.println(); + + + System.out.println("4.用链表实现队列*******************************************"); + LinkedListQueue linkedListQueue = new LinkedListQueue<>(); + System.out.println("队列是否为空" + linkedListQueue.isEmpty()); + linkedListQueue.add("a"); + linkedListQueue.add("b"); + linkedListQueue.add("c"); + linkedListQueue.add("d"); + System.out.println("查看队列头部元素" + linkedListQueue.peek()); + System.out.println("移除头部元素" + linkedListQueue.remove()); + System.out.println("查看队列头部元素" + linkedListQueue.peek()); + System.out.println("队列元素个数:" + linkedListQueue.size() + "个"); + System.out.println("队列是否为空" + linkedListQueue.isEmpty()); + + System.out.println(); + System.out.println(); + System.out.println(); + System.out.println(); + } +} diff --git a/P.java b/P.java new file mode 100644 index 0000000000000000000000000000000000000000..95265e6cc50995115dc6f495536c11fb524e4067 --- /dev/null +++ b/P.java @@ -0,0 +1,8 @@ +public class P { + B value; + P next = null; + + P(B value) { + this.value = value; + } +}