diff --git a/ArrayQueue.java b/ArrayQueue.java new file mode 100644 index 0000000000000000000000000000000000000000..22c4e79a45eab8b15e81456038cbc334c0128fbb --- /dev/null +++ b/ArrayQueue.java @@ -0,0 +1,70 @@ +import java.util.LinkedHashMap; + +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 t = (A) array[0]; + for (int j = 0; j < rear - 1; j++) { + array[j] = array[j + 1]; + i++; + } + rear = i; + return t; + } catch (Exception e) { + System.out.println("移除失败"); + } + return null; + + } + + // 获取头部元素 + public A peek() { + if (isEmpty()) { + System.out.println("无元素"); + return null; + } + A t = (A) array[0]; + return t; + } + + 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..978a6568690213aa9886731f31c4ad36d184c2db --- /dev/null +++ b/ArrayStack.java @@ -0,0 +1,70 @@ +import java.lang.reflect.Array; +import java.util.Arrays; + +public class ArrayStack { + + private Object[] Stack; + private int topPointer;//栈顶指针 + + // 数组现实的栈 + public ArrayStack(int length) { + + Stack = new Object[length]; + } + + // 入栈 + public void push(A t) { + if (t == null) { + System.out.println("插入失败:元素不能为空"); + return; + } + try { + Stack[topPointer] = t; + ++topPointer;//成功后自增 + } catch (Exception e) { + System.out.println("插入失败,栈已满"); + } + } + + // 出栈 + public A pop() { + if (isEmpty()) { + return null; + } + try { + A t = (A) Stack[topPointer - 1]; + Stack[topPointer - 1] = null;//取出元素后清空 + topPointer--;//成功后 + return t; + } 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..dfb3f182d56aea7594ad9e3f3b169b7e697bf402 --- /dev/null +++ b/LinkedList.java @@ -0,0 +1,54 @@ +public class LinkedList { + private Node head, tail; + private int size = 0; + + public int getSize() { + return size; + } + + public void addToFront(E value) { + Node node = new Node(value); + if (head == null) { + head = node; + tail = head; + } else { + node.next = head; + head = node; + } + size++; + } + + public void addToRear(E value) { + Node node = new Node(value); + if (tail == null) { + tail = node; + head = tail; + } else { + tail.next = node; + tail = node; + } + size++; + } + + + //删除头部节点 + public E delTopNode() { + if (head == null) { + return null; + } + E value = (E) head.value; + head = head.next;//删除头节点 + size--; + return value; + } + + //查看头部节点 + public E inquiryTopNode() { + if (head == null) { + return null; + } + return (E) head.value; + } + + +} diff --git a/LinkedListQueue.java b/LinkedListQueue.java new file mode 100644 index 0000000000000000000000000000000000000000..a8d20217da0a4e7fb1808e248208dbe0e9b5600f --- /dev/null +++ b/LinkedListQueue.java @@ -0,0 +1,50 @@ +public class LinkedListQueue { + private LinkedList myLinkedList = new LinkedList<>(); + private int size; + + //插入 + public void add(E item) { + myLinkedList.addToRear(item); + size++; + } + + + //移除头部元素 + public E remove() { + if (isEmpty()) { + System.out.println("无元素"); + return null; + } + try { + E e = myLinkedList.delTopNode(); + size--; + return e; + } catch (Exception e) { + System.out.println("移除失败"); + } + return null; + + } + + // 获取头部元素 + public E peek() { + if (isEmpty()) { + System.out.println("无元素"); + return null; + } + E e = myLinkedList.inquiryTopNode(); + return e; + } + + 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..0c1f7ba6ebaeaf720ac849e652908026aa4b884b --- /dev/null +++ b/LinkedListStack.java @@ -0,0 +1,48 @@ +public class LinkedListStack { + //栈顶即为链表头部元素 + + private LinkedList myLinkedList = new LinkedList<>(); + private int size=0; + + // 入栈(插入到链表头部) + public void push(E value) { + if (value==null){ + System.out.println("插入失败:元素不能为空"); + return; + } + myLinkedList.addToFront(value); + size++; + } + + // 出栈(从链表头部取出) + public E pop() { + if(isEmpty()){ + return null; + } + E e = myLinkedList.delTopNode(); + size--; + return e; + } + + //查看栈顶元素 + public E peek() { + if(isEmpty()){ + return null; + } + E e = myLinkedList.inquiryTopNode(); + return e; + } + + 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..bd26a4b8c61c5d5feeba1199f370842b772895db --- /dev/null +++ b/Main.java @@ -0,0 +1,57 @@ +import java.util.Arrays; + +public class Main { + public static void main(String[] args) { + System.out.println("********1.用数组实现栈********"); + ArrayStack arrayPen = new ArrayStack(3); + System.out.println("栈是否为空" + arrayPen.isEmpty()); + arrayPen.push("1"); + arrayPen.push("2"); + arrayPen.push(null); + arrayPen.push("4"); + System.out.println("查看栈顶元素" + arrayPen.peek()); + System.out.println("出栈" + arrayPen.pop()); + System.out.println("查看栈顶元素" + arrayPen.peek()); + System.out.println("栈内元素个数:" + arrayPen.size() + "个"); + System.out.println("栈是否为空" + arrayPen.isEmpty()); + + System.out.println("********2.用带尾指针的链表实现栈********"); + LinkedListStack linkedListPen = new LinkedListStack<>(); + System.out.println("栈是否为空" + linkedListPen.isEmpty()); + linkedListPen.push("1"); + linkedListPen.push("2"); + linkedListPen.push(null); + linkedListPen.push("4"); + System.out.println("查看栈顶元素" + linkedListPen.peek()); + System.out.println("出栈" + linkedListPen.pop()); + System.out.println("查看栈顶元素" + linkedListPen.peek()); + System.out.println("栈内元素个数:" + linkedListPen.size() + "个"); + System.out.println("栈是否为空" + linkedListPen.isEmpty()); + + System.out.println("********3.用数组实现队列********"); + ArrayQueue arrayQueue = new ArrayQueue<>(4); + System.out.println("队列是否为空" + arrayQueue.isEmpty()); + arrayQueue.add("1"); + arrayQueue.add("2"); + arrayQueue.add("3"); + arrayQueue.add("4"); + 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("********4.用链表实现队列********"); + LinkedListQueue linkedListQueue = new LinkedListQueue<>(); + System.out.println("队列是否为空" + linkedListQueue.isEmpty()); + linkedListQueue.add("1"); + linkedListQueue.add("2"); + linkedListQueue.add("3"); + linkedListQueue.add("4"); + 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()); + } +} diff --git a/Node.java b/Node.java new file mode 100644 index 0000000000000000000000000000000000000000..72661db5fcddb5014074d689a9cadbef39bb20b8 --- /dev/null +++ b/Node.java @@ -0,0 +1,8 @@ +public class Node { + E value; + Node next = null; + + Node(E value) { + this.value = value; + } +} diff --git a/lec03-stack-queue.iml b/lec03-stack-queue.iml new file mode 100644 index 0000000000000000000000000000000000000000..b107a2dd81165eaaf682ad3da030668b937fbb6c --- /dev/null +++ b/lec03-stack-queue.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file