一.上机内容
1、顺序栈和链栈基础上的基本操作及实现。
2、顺序存储基础上的循环队列基本操作及实现。
3、假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队列和出队列的算法。
4*、假设将循环队列定义为:以域变量rear和length分别指示循环队列中队尾元素的位置和内含元素的个数。试给出此循环队列的队满条件,并写出相应的入队列和出队列的算法(在出队列的算法中要返回队头元素)。
5*、利用栈和队列的知识,解决停车场管理问题
二.代码实现
1、顺序栈和链栈基础上的基本操作及实现。
(1)链表实现:
package com.作业.ch03;
// 使用链表来实现栈
public class Stack01<T> implements IStack<T>{
// 内部节点类
private class Node{
// 属性
T item;
Node next;
// 构造方法
public Node(T item, Node next) {
this.item = item;
this.next = next;
}
}
// 属性
// 栈中元素个数
int N;
// 栈顶
Node top;
// 构造方法
public Stack01() {
this.N = 0;
this.top = new Node(null,null);
}
/**
* 清空一个栈
*/
@Override
public void clear() {
this.N = 0;
this.top = new Node(null,null);
}
/**
* 判断栈是否为空
* @return
*/
@Override
public boolean isEmpty() {
return this.N == 0;
}
/**
* 获取栈的长度
* @return
*/
@Override
public int length() {
return this.N;
}
/**
* 取栈顶元素并返回其值
* @return
*/
@Override
public T peek() {
return top.next.item;
}
/**
* 压栈
* @param t
* @throws Exception
*/
@Override
public void push(T t) throws Exception {
// 创建新节点,指向原来top指向的节点
Node newNode = new Node(t,top.next);
top.next = newNode;
// 长度加一
this.N++;
}
/**
* 弹栈
* @return
*/
@Override
public T pop() {
// 找到原来的首节点
if (isEmpty()){
return null;
}else{
Node oldNode = top.next;
top.next = top.next.next;
return oldNode.item;
}
}
}
(2)
顺序表实现:
package com.作业.ch03;
public class Stack02<T> implements IStack<T> {
// 属性
public T[] array;
public int N;
public Stack02(int capacity) {
this.array = (T[]) new Object[capacity];
this.N = 0;
}
/**
* 清空栈
*/
@Override
public void clear() {
this.N = 0;
}
/**
* 判断栈是否为空
* @return
*/
@Override
public boolean