栈与队列基本操作 Java实现
一、顺序栈
//数组实现顺序栈 public class OrderStack { private String[] elem; private int top; OrderStack(int k) { elem = new String[k]; top = -1; } //判满 boolean isFull() { return top == (elem.length - 1); } //判空 boolean isEmpty() { return top == -1; } //进栈 boolean push(String s) { if(isFull()) { return false; } elem[++top] = s; return true; } //出栈 String pop() { if(isEmpty()) { System.out.println("Empty stack"); return null; }else { return elem[top--]; } } //获取栈顶元素 String getTop() { if(isEmpty()) { System.out.println("Empty stack"); return null; }else { return elem[top]; } } }
二、链栈
存储结构
public class LinkNode { int i; LinkNode next; LinkNode(int i) { this.i = i; } public String toString() { return String.valueOf(i); } }
链栈实现
//链表存储实现 public class LinkStack { private LinkNode top; LinkStack() { top = new LinkNode(-1); } boolean isEmpty() { return top.next ==null; } //头插法方便出栈 LinkNode push(LinkNode temp) { if(temp == null) { System.out.println("null pointer"); } temp.next = top.next; top.next = temp; return temp; } LinkNode pop() { LinkNode temp = null; if(isEmpty()) { System.out.println("empty"); return null; } temp = top.next; top.next = temp.next; return temp; } LinkNode getTop() { return top.next; } }
三、队列
存储结构
public class LinkNode { int i; LinkNode next; LinkNode(int i) { this.i = i; } public String toString() { return String.valueOf(i); } }
链队列
public class MyQueue { private LinkNode front; private LinkNode rear; MyQueue() { front = new LinkNode(-1); rear = front; } boolean isEmpty() { return front == rear; } LinkNode enterQueue(LinkNode temp) { rear.next = temp; rear = temp; return temp; } LinkNode deleteQueue() { if(isEmpty()) { System.out.println("Empty"); } LinkNode temp = front.next; if(front.next == rear) { front.next = rear.next; rear = front; } front.next = temp.next; temp.next = null; return temp; } }
循环队列
//数组实现的循环队列 //采用不损失空间的方式实现 public class CirQueue { private String[] elem; private int front; private int rear; //入队flag赋1值,出队flag赋0值 private int flag = 0; CirQueue(int k) { elem = new String[k]; front = 0; rear = 0; } boolean isFull() { return flag == 1 && rear == front; } boolean isEmpty() { return flag == 0 && rear == front; } String enter(String temp) { if(isFull()) { System.out.println("Full"); }else { elem[rear] = temp; rear = (rear + 1) % elem.length; flag = 1; } return temp; } String delete() { String temp = null; if(isEmpty()) { System.out.println("Empty"); }else { temp = elem[front]; front = (front + 1)%elem.length; flag = 0; } return temp; } }
这里使用了一个编程的小技巧,将操作打上了记号。