「java实现栈的数据结构」栈 数据结构

博主:adminadmin 2022-12-31 11:36:07 804

本篇文章给大家谈谈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实现栈的数据结构的信息别忘了在本站进行查找喔。