1.线性表的定义
package day8_2;
import java.util.Arrays;
public class MyArraysList {
public Object [] objects;
public int size;
public int capacity;
public MyArraysList(){
this.capacity = 5;
objects = new Object[this.capacity];
}
public MyArraysList(int capacity){
this.capacity = capacity;
objects = new Object[this.capacity];
}
@Override
public String toString() {
return "MyArraysList{" +
"objects=" + Arrays.toString(objects) +
", size=" + size +
", capacity=" + capacity +
'}';
}
//添加元素
public void add(Object o){
//判断线性表是否满了
if (isFull()){
//如果满了就进行扩容
dilatation();
}
objects[size++] = o;
}
//扩容操作
private void dilatation() {
int newcapacity = this.capacity * 2;
Object [] newobject = Arrays.copyOf(this.objects,newcapacity);
for (int i = 0; i < this.size; i++){
newobject[i] = objects[i];
}
this.objects = newobject;
this.capacity = newcapacity;
}
//判断是否为空
private boolean isFull() {
return this.size == this.capacity;
}
//移除线性表对应下标的值
public void remove(int index){
for (int i = index; i < size - 1; i++){
this.objects[index] = this.objects[index + 1];
}
this.size--;
}
//获取对应下标的值
public Object get(int index){
return objects[index];
}
//获取线性表的长度
public int getSize(){
return size;
}
//设置对应的下标的值
public void setObjects(int index,Object o){
if (index < 0 ||index > size){
System.out.println("设置下标不在有效范围!");
}
objects[index] = o;
}
//在对应下标插入对应的值
public void Insert(int index,Object o){
if (index < 0 ||index > size){
System.out.println("插入的下标不在有效范围!");
}
if (isFull()){
dilatation();
}
for (int i = size; i > index; i--) {
objects[i] = objects[i - 1];
}
objects[index] = o;
size++;
}
public void Delete(int index){
if (index < 0 ||index > size){
System.out.println("删除的下标不在有效范围!");
}
for (int i = index; i < size - 1; i++) {
objects[i] = objects[i + 1];
}
size--;
}
}
以下是测试代码:
package day8_2;
public class TestMyArraysList {
public static void main(String[] args) {
MyArraysList myArraysList = new MyArraysList();
myArraysList.add(123);
myArraysList.add(456);
myArraysList.add("ABC");
myArraysList.add("DEF");
myArraysList.add("D");
myArraysList.add("E");
System.out.println(myArraysList);
System.out.println(myArraysList.size);
System.out.println(myArraysList.get(3));
System.out.println(myArraysList.getSize());
myArraysList.Delete(1);
System.out.println(myArraysList);
myArraysList.Insert(1,666);
System.out.println(myArraysList);
myArraysList.add(777);
myArraysList.add(888);
myArraysList.add(999);
myArraysList.add(520);
myArraysList.add(1314);
myArraysList.add("七夕节快乐!");
System.out.println(myArraysList);
myArraysList.setObjects(11,"情人节快乐!");
System.out.println(myArraysList);
myArraysList.remove(1);
System.out.println(myArraysList);
}
}
/*
MyArraysList{objects=[123, 456, ABC, DEF, D, E, null, null, null, null], size=6, capacity=10}
6
DEF
6
MyArraysList{objects=[123, ABC, DEF, D, E, E, null, null, null, null], size=5, capacity=10}
MyArraysList{objects=[123, 666, ABC, DEF, D, E, null, null, null, null], size=6, capacity=10}
MyArraysList{objects=[123, 666, ABC, DEF, D, E, 777, 888, 999, 520, 1314, 七夕节快乐!, null, null, null, null, null, null, null, null], size=12, capacity=20}
MyArraysList{objects=[123, 666, ABC, DEF, D, E, 777, 888, 999, 520, 1314, 情人节快乐!, null, null, null, null, null, null, null, null], size=12, capacity=20}
MyArraysList{objects=[123, ABC, ABC, DEF, D, E, 777, 888, 999, 520, 1314, 情人节快乐!, null, null, null, null, null, null, null, null], size=11, capacity=20}
*/
2.栈的定义
package day8_2;
import java.util.Arrays;
import java.util.Objects;
/*
栈的的定义
*/
public class Stack {
//创建容器来存储元素
private Object [] data;
//容器现在元素的个数
private int size;
//容器的容量
private int capacity;
//创建一个默认容量为10的容器
public Stack(){
this.capacity = 10;
data = new Object[this.capacity];
}
//创建指定容量的容器
public Stack(int n){
data = new Object[n];
}
//将一个元素存储到容器中
public void push(Object e){
//判断栈是否满了
if (this.isFull()){
this.resize(2 * this.capacity);
}else {
this.data[size++] = e;
}
}
//如果容器内的个数等于容量,则认定为容器满了
private boolean isFull(){
return this.capacity == this.size;
}
//对容器的容量进行扩容
private void resize(int len){
// Object[] arr = new Object[len];
// for(int i = 0; i < data.length; i ++){
// arr[i] = data [i];
// }
this.data = Arrays.copyOf(this.data,len);
this.capacity = len;
}
public Object pop(){
if (this.isEmpty()){
// System.out.println("栈为空!!!");
throw new RuntimeException("栈为空!!!");
}
return this.data[--this.size];
}
private boolean isEmpty() {
return this.size == 0;
}
public Object peek(){
return this.data[size-1];
}
public int size(){
return this.size;
}
public void clear(){
this.size = 0;
}
@Override
public String toString() {
return Arrays.toString(Arrays.copyOf(this.data,this.size));
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Stack stack = (Stack) o;
return size == stack.size && capacity == stack.capacity && Arrays.equals(data, stack.data);
}
}
以下是测试代码:
//测试
public static void main(String[] args) {
Stack stack = new Stack();
System.out.println(stack);
stack.push("lele");
stack.push(1999);
stack.push(666);
System.out.println(stack);
System.out.println(stack.size());
System.out.println(stack.isEmpty());
System.out.println(stack.isFull());
System.out.println(stack.peek());
System.out.println(stack.pop());
System.out.println(stack.peek());
System.out.println(stack);
stack.clear();
System.out.println(stack.isEmpty());
System.out.println(stack);
}
/*
[]
[lele, 1999, 666]
3
false
false
666
666
1999
[lele, 1999]
true
[]
*/
3.队列的定义
package day8_2;
import java.util.Arrays;
public class myQueue {
private Object[] data;
private int size;
private int capacity;
public myQueue() {
this.capacity = 10;
data = new Object[this.capacity];
}
public myQueue(int capacity) {
this.capacity = capacity;
data = new Object[this.capacity];
}
//进队列一个元素
public void push(Object e){
// 判断队列是否已满
if (this.isFull()) {
// 扩容
int length = this.capacity + (this.capacity >>> 1);
this.resize(length);
} else {
this.data[size++] = e;
}
}
// 判断是否存满
private boolean isFull() {
return this.capacity == this.size;
}
// 扩容或缩容容器的大小
private void resize(int len){
this.data = Arrays.copyOf(this.data, len);
this.capacity = len;
}
// 判断队列是否为空
public boolean isEmpty(){
return this.size == 0;
}
// 出队列一个元素
public Object pop(){
if (this.isEmpty()) {
throw new RuntimeException("队列中已经没有元素!");
}
this.size--;
Object temp = this.data[0];
System.arraycopy(data, 1, this.data, 0, data.length - 1);
return temp;
}
// 获取队列中元素的个数
public int size(){
return this.size;
}
// 清空队列
public void clear(){
this.size = 0;
}
// 返回队列的字符串形式
public String toString(){
return Arrays.toString(Arrays.copyOf(this.data, this.size));
}
// 对比两个队列是否相等
@Override
public boolean equals(Object o) {
myQueue s = (myQueue) o;
if (this.size != s.size()) {
return false;
}
for (int i = 0; i < s.size() ; i++) {
if (data[i] != s.data[i]) {
return false;
}
}
return true;
}
public static void main(String[] args) {
myQueue mq = new myQueue();
}
}