一、栈
栈是一种只能在一端进行插入或删除操作的线性表。表中允许进行插入、删除的一端叫栈顶,另一端叫栈底。栈的特点是“先进后出”。
栈中数据元素的逻辑关系呈线性关系,所有栈可以像线性表一样采用顺序存储结构进行存储,即分配一块连续的存储空间来存放栈中元素,并用一个变量指向当前栈顶元素以反映栈中元素的变化。采用顺序存储结构的栈叫做顺序栈。
栈操作的代码示例:
//栈
class MyStack {
int[] stack;
public MyStack(){
stack = new int[0];
}
//入栈
public void push(int number){
//创建一个新数组
int[] newStack = new int[stack.length+1];
//将原数组中的元素复制到新数组中
for (int i = 0;i < newStack.length-1;i++){
newStack[i] = stack[i];
}
//入栈
newStack[stack.length]=number;
stack=newStack;
}
//出栈,取出栈顶元素
public int pop(){
try{
if (stack.length==0){
throw new Exception("stack is empty !");
}
}catch(Exception e){
e.printStackTrace();
}
int number = stack[stack.length-1];
int[] newStack = new int[stack.length-1];
for (int i = 0;i < newStack.length;i++){
newStack[i] = stack[i];
}
stack=newStack;
return number;
}
//查看栈顶元素
public int getTop(){
return stack[stack.length-1];
}
//判断栈是否为空
public boolean isEmpty(){
return stack.length==0;
}
}
public class MyStackTest {
public static void main(String[] args) {
MyStack ms = new MyStack();
ms.push(6);
ms.push(5);
ms.push(4);
ms.push(3);
//取出栈顶元素
System.out.println("取出的栈顶元素是 "+ms.pop());
//查看栈顶元素
System.out.println("现在的栈顶元素是 "+ms.getTop());
System.out.println("栈是否为空:"+ms.isEmpty());
}
}
2.队列
队列简称队,它是一种操作受限的线性表,其限制是仅允许在表的一端进行插入操作,在另一端进行删除操作。插入操作的一端叫队尾,删除操作的一端叫队头。特点是先进先出。
队列中元素的逻辑关系为线性关系,所以队列可以像线性表一样采用顺序存储结构,这样的队列称为顺序队。
class MyQueue{
int[] queue;
public MyQueue(){
queue = new int[0];
}
//入队操作
public void add(int number){
int newQueue = new int[queue.length+1];
for(int i=0;i<queue.length;i++){
newQueue[i]=queue[i];
}
newQueue[queue.length]=number;
queue = newQueue;
}
//出队操作
public int poll(){
int number = queue[0];
int newQueue = new int[queue.length-1];
for(int i = 0;i<newQueue.length;i++){
newQueue[i] = queue[i+1];
}
queue = newQueue;
return number;
}
//判断队列是否为空
public boolean isEmpty(){
return queue.length==0;
}
}
public class QueueTest{
public static void main(){
MyQueue mq = new MyQueue();
//元素入队列
mq.add[7];
mq.add[6];
mq.add[5];
//元素出队
System.out.println(mq.poll());
System.out.println(mq.poll());
System.out.println(mq.poll());
//判断队列是否为空
System.out.println(mq.isEmpty());
}
}