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