本文目录一览:
java多线程添加学生 用链式结构怎么写
Java队列的链式存储结构及实现: 类似于使用链式结构保存线性表,也可以采用链式结构来保存队列的元素,采用链式存储结构的队列也被称为链队列。 对于链队列而言,由于程序需要从rear端添加元素,然后从front端删除元素,因此考虑对链队列增加front、rear两个引用变量,使他们分别指向链队列的头、尾两个节点。
- 插入队列
对于链队列而言,插入操作的实现非常简单,只要创建一个新节点,让原rear节点的next指向新节点,再让rear指向新节点即可。 - 移除队列
对于链队列而言,删除操作的实现也是非常的简单,只要将原front节点指向原front节点的next节点,当然不要忘记释放原front节点的引用。
JAVA集合中的队列:
从JDK 1.5开始,Java的集合框架提供了一个Queue接口,该接口代表了一个队列。实现该接口或者实现继承了该接口的类可以当做队列来使用。Queue里包含了6个方法,用于代表队列所包含的3个标志性方法,如下所示:
- 插入:在rear端插入元素。
- 移除:在front端删除元素。
- 访问:在front端访问元素。 JDK提供的工具类非常强大,它分别代表了线性表、队列、栈三种数据结构提供了两种实现:顺序结构和链式结构。虽然LinkedList工具类的功能非常强大,既可以作为线性表来使用、又可以作为队列来使用,还可作为栈来使用,但对大部分程序而言,使用ArrayList和ArrayDeque时性能可能比LinkedList更好。
java用链表实现栈
public Object setEle(Object element) {
Object oldElement = this.element;
this.element = element;
return oldElement;
}
这段代码的作用是设置节点的值,并返回旧的值。虽然看起来有些多余,但这种设计在某些场景下可以提供额外的灵活性。
public Linked() {
nextNode = null;
element = null;
}
可以改为:
public Linked(Object element) {
this.element = element;
nextNode = null;
}
我要用java实现一个栈,基本操作就是出栈入栈。请问如何实现效率比较高。
使用JDK提供的栈
import java.util.Stack;
public class UsingStack {
public static void main(String[] args) {
// 构造栈对象,使用类型限制,只能存储Integer数据
Stack<Integer> s = new Stack<>();
// 1、2、3依次入栈
s.push(1);
s.push(2);
s.push(3);
// 3、2、1依次出栈
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
}
}
自定义顺序结构的栈
import java.util.EmptyStackException;
import java.util.Vector;
public class UsingStack {
public static void main(String[] args) {
// 构造栈对象,使用类型限制,只能存储Integer数据
MyStack<Integer> s = new MyStack<>();
// 1、2、3依次入栈
s.push(1);
s.push(2);
s.push(3);
// 3、2、1依次出栈
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
}
}
/**
* 栈类
* @author developer_05
* @param <T>
*/
class MyStack<T> extends Vector<T> {
/**
* 构造方法
*/
public MyStack() {
}
/**
* 入栈方法
* @param item 待入栈的元素
* @return 返回入栈的元素
*/
public T push(T item) {
addElement(item);
return item;
}
/**
* 出栈方法(同步处理)
* @return 返回出栈元素
*/
public synchronized T pop() {
T obj;
int len = size();
if (len == 0)
throw new EmptyStackException();
obj = elementAt(len - 1);
removeElementAt(len - 1);
return obj;
}
/**
* 判断栈是否为空的方法
* @return 返回true(栈空)或false(栈非空)
*/
public boolean empty() {
return size() == 0;
}
private static final long serialVersionUID = 1L;
}
java语言中用LinkList实现堆栈
栈和队列是两种特殊的线性表,它们的逻辑结构和线性表相同,只是其运算规则较线性表有更多的限制,故又称它们为运算受限的线性表。 LinkedList数据结构是一种双向的链式结构,每一个对象除了数据本身外,还有两个引用,分别指向前一个元素和后一个元素,和数组的顺序存储结构(如:ArrayList)相比,插入和删除比较方便,但速度会慢一些。
栈的定义
栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。
- 通常称插入、删除的这一端为栈顶(Top),另一端称为栈底(Bottom)。
- 当表中没有元素时称为空栈。
- 栈为后进先出(Last In First Out)的线性表,简称为LIFO表。 栈的修改是按后进先出的原则进行。每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除。
实现代码
package com.weisou.dataStruct;
import java.util.LinkedList;
@SuppressWarnings("unchecked")
public class MyStack {
LinkedList<Object> linkList = new LinkedList<>();
public void push(Object object) {
linkList.addFirst(object);
}
public boolean isEmpty() {
return linkList.isEmpty();
}
public void clear() {
linkList.clear();
}
// 移除并返回此列表的第一个元素
public Object pop() {
if (!linkList.isEmpty())
return linkList.removeFirst();
return "栈内无元素";
}
public int getSize() {
return linkList.size();
}
public static void main(String[] args) {
MyStack myStack = new MyStack();
myStack.push(2);
myStack.push(3);
myStack.push(4);
System.out.println(myStack.pop());
System.out.println(myStack.pop());
}
}
队列定义
队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。
- 允许删除的一端称为队头(Front)。
- 允许插入的一端称为队尾(Rear)。
- 当队列中没有元素时称为空队列。
- 队列亦称作先进先出(First In First Out)的线性表,简称为FIFO表。
实现代码
package com.weisou.dataStruct;
import java.util.LinkedList;
/**
*
* @author gf
* @date 2009-11-13
*/
public class MyQueue {
LinkedList<Object> linkedList = new LinkedList<>();
// 队尾插
public void put(Object o) {
linkedList.addLast(o);
}
// 队头取 取完并删除
public Object get() {
if (!linkedList.isEmpty())
return linkedList.removeFirst();
else
return "";
}
public boolean isEmpty() {
return linkedList.isEmpty();
}
public int size() {
return linkedList.size();
}
public void clear() {
linkedList.clear();
}
/**
* @param args
*/
public static void main(String[] args) {
MyQueue myQueue = new MyQueue();
myQueue.put(1);
myQueue.put(2);
myQueue.put(3);
System.out.println(myQueue.get());
}
}