【Java开源代码栏目提醒】:网学会员为需要Java开源代码的朋友们搜集整理了TextLinkedList.java相关资料,希望对各位网友有所帮助!
package com.zf.s8;//创建一个包
abstract class MyList {
protected int size = 0;//长度
protected MyList() {//默认构造方法
}
abstract public boolean add(Object o);//抽象向链表末尾添加一个元素
abstract public Object get(int index);//获得指定元素
abstract public boolean contains(Object o);//判断是否包含元素
abstract int indexOf(Object o);//判断元素的位置
abstract public boolean remove(Object o);//移除元素
abstract public void clear();//清空
public int size() {//获得长度大小
return this.size;
}
public boolean isEmpty() {//判断是否为空
return this.size == 0;
}
}
interface Queue {//队列接口
void enqueue(String o);
Object dequeue();//
boolean isEmpty();//判断是否为空
}
interface Stack {//栈接口
void push(Object o);//元素入栈
Object pop();//元素出栈
boolean isEmpty();//是否为空
}
class LinkedList extends MyList implements Queue, Stack {
private static class MyEntry<E> {//静态内部类
Object object;//对象
MyEntry next;//下一个对象
MyEntry previous;//上一个对象
MyEntry(Object object, MyEntry next, MyEntry previous) {//带参数的构造方法进行初始化
this.object = object;
this.next = next;
this.previous = previous;
}
}
private MyEntry header = new MyEntry(null, null, null);//创建实体对象
public LinkedList() {//默认构造方法进行初始化
this.header.next = this.header.previous = this.header;
}
private MyEntry addBefore(Object o, MyEntry e) {//添加对象之前的操作方法
MyEntry newEntry = new MyEntry(o, e, e.previous);//创建实体对象
newEntry.previous.next = newEntry;
newEntry.next.previous = newEntry;
this.size++;
return newEntry;
}
public boolean add(Object o) {//添加对象
this.addBefore(o, header);
return true;
}
public void clear() {//清空对象
MyEntry e = this.header.next;
while (e != this.header) {//判断进行循环
MyEntry next = e.next;
e.next = e.previous = null;//清空对象
e.object = null;//清空对象
e = next;
}
this.header.next = this.header.previous = this.header;
this.size = 0;
}
public boolean contains(Object o) {//是否包含对象
return this.indexOf(o) != -1;
}
public Object get(int index) {//获得指定的对象
MyEntry<Object> myEntry = this.entry(index);
if (myEntry == null)
return null;
return myEntry.object;
}
public int indexOf(Object o) {//获得对象在栈或队列中的位置
int index = 0;
if (o == null) {
for (MyEntry e = this.header.next; e != this.header; e = e.next) {//循环获得元素对象
if (e.object == null)
return index;
index++;
}
} else {
for (MyEntry e = this.header.next; e != this.header; e = e.next) {//循环获得元素对象
if (o.equals(e.object))
return index;
index++;
}
}
return -1;
}
public boolean remove(Object o) {//移除对象
if (o == null) {
for (MyEntry<Object> e = header.next; e != header; e = e.next) {//循环获得元素对象
if (e.object == null) {
return this.remove(e);//移除对象
}
}
} else {
for (MyEntry<Object> e = header.next; e != header; e = e.next) {//循环获得元素对象
if (o.equals(e.object)) {
return this.remove(e);//移除对象
}
}
}
return false;
}
public Object dequeue() {//出队方法
Object result = this.header.next.object;//获得对象
this.remove(this.header.next);//移除对象
return result;
}
public void enqueue(String o) {//入队方法
this.addBefore(o, header);//调用方法添加对象
}
public Object pop() {//出栈方法
Object result = this.header.previous.object;//获得对象
this.remove(this.header.previous);//移除对象
return result;
}
public void push(Object o) {//入栈
this.addBefore(o, header);//调用方法添加对象
}
private boolean remove(MyEntry e) {//移除对象
if (e == header) {
return false;
}
e.previous.next = e.next;//重新赋值
e.next.previous = e.previous;//重新赋值
e.next = e.previous = null;//清空
e.object = null;
this.size--;
return true;
}
private MyEntry entry(int index) {//获得指定的对象
if (index < 0 || index >= this.size) {//判断指定元素的下标
return null;
}
MyEntry e = header;
if (index < (this.size >> 1)) {//判断循环获得指定的实体
for (int i = 0; i <= index; i++)
e = e.next;
} else {
for (int i = this.size; i > index; i--)
e = e.previous;
}
return e;
}
}
public class TextLinkedList {// 操作LinkedList类实现栈和队列的类
public static void main(String[] args) {// java程序主入口处
Queue myQueue = new LinkedList();//实例化队列对象
myQueue.enqueue("HelloWorld");//入队
myQueue.enqueue("Hello");//入队
while (!myQueue.isEmpty()) {//循环判断队列是否为空
System.out.println(myQueue.dequeue());//输出出队元素
}
Stack myStack = new LinkedList();//实例化栈对象
myStack.push("1234567890");//入栈
myStack.push("0987654321");//入栈
while (!myStack.isEmpty()) {//循环判断栈是否为空
System.out.println(myStack.pop());//输出出栈元素
}
}
}
上一篇:
TextLength.java
下一篇:
法律专业开题报告范文