今天的是一些数据结构中栈和队列的基本操作,算是作为用java描述数据结构的一个开始。
之前学的都是用c语言描述,现在因为开始准备java方向的一些事情,所以打算开始过一遍java的数据结构。
栈
栈的特点是,栈里面的元素是先进后出的形式。比如把1,2,3依次放进一个栈里面,取出之后的顺序就变成了3,2,1。栈在java里是用数组的形式表现,相当于是吧一个一个的数存进数组里,然后设置一个top表示当前最高位,采用arr[top]的形式读入和取出栈顶元素。下面看代码的实现:
MyStack类:
public class MyStack { //数组实现 private long arr[]; private int top; //默认 public MyStack() { arr = new long[10]; top = -1; } //带参构造方法 public MyStack(int maxsize) { arr = new long[maxsize]; top = -1; } //加入数据 public void push(int data) { arr[++top] = data; } //pop移除数据 public long pop() { return arr[top--]; } //查看数据 public long LookTopData() { return arr[top]; } //判断是否为空 public boolean isEmpty() { return top == -1; } //判断是否满 public boolean isFull() { return top == arr.length - 1; } }
测试程序:(省略了public static void main等框架)
//测试栈 MyStack a = new MyStack(4); a.push(23); a.push(12); a.push(1); a.push(90); System.out.println(a.isEmpty()); System.out.println(a.isFull()); System.out.println(a.LookTopData()); while(!a.isEmpty()) { System.out.println(a.pop()+" "); }
队列
队列的特点是,队列里面的元素是先进先出的形式。比如把1,2,3依次放进一个队列里面,取出之后的顺序就仍然是1,2,3。队列在java里也是用数组的形式表现,相当于是吧一个一个的数存进数组里,然后设置一个队头和队尾,采用数组循环存放的形式实现队列。下面看代码的实现:
MyQueue类:
public class MyQueue { //底层使用数组 private long[] arr; //大小 private int elements; //队头 private int front; //队尾 private int end; //默认构造方法 public MyQueue() { arr = new long[10]; elements = 0; front = 0; end = -1; } //带参数构造方法,参数为数组大小 public MyQueue(int maxsize) { arr = new long[maxsize]; elements = 0; front = 0; end = -1; } //添加数据 public void insert(long data) { if(end == arr.length - 1 ) { end = -1; } arr[++end] = data; elements++; } //删除数据,从队头删除 public long remove() { long data = arr[front++]; if(front == arr.length) { front = 0; } elements--; return data; } //查看数据,队头 public long Look() { return arr[front]; } //判断是否为空 public boolean isEmpty() { return elements == 0; } //判满 public boolean isFull() { return elements == arr.length; } }
测试程序:(省略了public static void main等框架)
MyQueue mq = new MyQueue(4); mq.insert(23); mq.insert(45); mq.insert(13); mq.insert(1); System.out.println(mq.isEmpty()); System.out.println(mq.isFull()); System.out.println(mq.Look()); while(!mq.isEmpty()) { System.out.print(mq.remove() + " "); }