「java实现栈的数据结构」栈 数据结构
本篇文章给大家谈谈java实现栈的数据结构,以及栈 数据结构对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、【JAVA】写一个类,实现栈这种数据结构,要求底层数据使用ArrayList存储。
- 2、用Java中的集合类方面的知识实现:模拟一个堆栈的数据存储结构。
- 3、JAVA数据结构有哪几种
- 4、用一维整数数组实现数据结构中的堆栈(Stack)。(用java语言)
【JAVA】写一个类,实现栈这种数据结构,要求底层数据使用ArrayList存储。
栈的特点的就是后进先出,那么你就linkedList,如果要添加一个元素,就把他存到最后一个位置,要取一个元素,也从最后开始取就可以实现了,只有linkedList才有存,取,删最后一个元素这个方法,所以要要用linkedList
代码如下:
public
class
StudyTest
{
private
LinkedList
list
=
new
LinkedList
();
public
String
get()
{
return
list.getLast();
}
public
void
add(String
str)
{
this.list.addLast(str);
}
public
void
remove(){
this.list.removeLast();
}
}
用Java中的集合类方面的知识实现:模拟一个堆栈的数据存储结构。
使用LinkedList模拟一个堆栈或者队列数据结构
LinkedList特有方法:
addFirst();
addLast();
getFirst();
getLast();1234512345
获取元素但不删除元素。如果集合中没有元素会会出现NoSuchElementException.
(JDK 1.6 出现替代方法offerFirst(),offLast();peekFirst(),peekLast()。集合中没有元素会返回Null)
removeFirst();
removeLast();1212
获取元素,但是元素被删除。如果集合中没有元素会出现NoSuchElementException.
(JDK 1.6 出现替代方法poolFirst(),poolLast()。集合中没有元素会返回Null)
队列数据结构:先进先出,如同一个水管
import java.util.*;
public class LinkedListDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedListString link=new LinkedListString();
link.addFirst("java01");
link.addFirst("java02");
link.addFirst("java03");
link.addFirst("java04");
sop(link);
while(!link.isEmpty())
{
sop(link.removeLast());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}123456789101112131415161718192021222324252627123456789101112131415161718192021222324252627
运行结果:
加入取出元素代码
link.getFirst();11
则会出现NoSuchElementException,表示集合中没有元素会出现
堆栈数据结构:先进后出,如同一个杯子
只需将如上代码中while循环中removeLast()改为removeFirst()即可。如下:
import java.util.*;
public class LinkedListDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedListString link=new LinkedListString();
link.addFirst("java01");
link.addFirst("java02");
link.addFirst("java03");
link.addFirst("java04");
sop(link);
while(!link.isEmpty())
{
sop(link.removeFirst());
}
link.getFirst();
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}1234567891011121314151617181920212223242526272812345678910111213141516171819202122232425262728
运行结果:
或者可以封装为以下代码:
import java.util.*;
class DuiLie
{
private LinkedListString link;
DuiLie()
{
link=new LinkedListString();
}
public void myadd(String s)
{
link.addFirst(s);
}
public Object myget()
{
return link.removeLast();//FIFO,队列
//return link.removeFirst();//先进后出,堆栈
}
public boolean isNull()
{
return link.isEmpty();
}
}
public class LinkedListTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
DuiLie d1=new DuiLie();
d1.myadd("java01");
d1.myadd("java02");
d1.myadd("java03");
d1.myadd("java04");
while(!d1.isNull())
{
System.out.println(d1.myget());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
JAVA数据结构有哪几种
JAVA数据结构有以下几种:
1、List:
List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下 标)来访问List中的元素,这类似于Java的数组。
2、Vector:
基于数组(Array)的List,其实就是封装了数组所不具备的一些功能方便我们使用,所以它难易避免数组的限制,同时性能也不可能超越数组。
另外很重要的一点就是Vector是线程同步的(sychronized)的,这也是Vector和ArrayList 的一个的重要区别。
3、ArrayList:
同Vector一样是一个基于数组上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector好一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。
4、LinkedList:
LinkedList不同于前面两种List,它不是基于数组的,所以不受数组性能的限制。 它每一个节点(Node)都包含两方面的内容:节点本身的数据(data),下一个节点的信息(nextNode)。
所以当对LinkedList做添加,删除动作的时候就不用像基于数组的ArrayList一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了,这是LinkedList的优势。
5、HashSet:
虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。
但是Set则是在 HashMap的基础上来实现的,这就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储项。
6、HashMap:
基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
7、HashTable:
Hashtable 是一个散列表,它存储的内容是键值对(key-value)映射。Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。
Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为nul
用一维整数数组实现数据结构中的堆栈(Stack)。(用java语言)
public class IntStack {
private int[] stack;
private int top;
/**
*初始化栈,传入一个非负的整数,否则抛出一个错误
*/
public IntStack(int size) throws StackErrorException{
if(size0){
throw new StackErrorException("错误的大小");
}
init(size);
}
private void init(int size) {
stack = new int[size];
top = 0;
}
/**
*判断栈是否为空,true则为空,反之则反
*/
public boolean isEmpty(){
return top==0;
}
/**
*判断栈是否已满,true则已满,反之则反
*/
public boolean isFull(){
return top==stack.length;
}
/**
*向栈顶添加元素,满则抛出异常
*/
public void push(int value) throws StackErrorException{
if(isFull()){
throw new StackErrorException("栈已满");
}
stack[top++] = value;
}
/**
*移除栈顶元素并返回,空则抛出异常
*/
public int pop() throws StackErrorException{
if(isEmpty()){
throw new StackErrorException("已到栈底!");
}
return stack[--top];
}
/**
*返回栈顶元素,空则抛出异常
*/
public int peek() throws StackErrorException{
if(isEmpty()){
throw new StackErrorException("已在栈底!");
}
return stack[top-1];
}
/**
*返回栈大小
*/
public int size(){
return stack.length;
}
class StackErrorException extends Exception{
public StackErrorException(String msg) {
super(msg);
}
}
}
java实现栈的数据结构的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于栈 数据结构、java实现栈的数据结构的信息别忘了在本站进行查找喔。