堆栈的链式存储称为链栈。
public class Stack<T> implements StackInterface<T> {
private Node<T> top; //链表首结点引用
private int size; //栈的大小
public Stack() {
top = null;
size = 0;
}
//返回堆栈的大小
public int getSize() {
return size;
}
//判断堆栈是否为空
public boolean isEmpty() {
return size==0;
}
//数据元素e入栈
public void push(T t) {
Node<T> q = new Node<T>(t,top);
top = q;
size++;
}
//栈顶元素出栈
public T pop() throws StackEmptyException {
if (size<1)
throw new StackEmptyException("错误,堆栈为空。");
T t = top.getData();
top = top.getNext();
size--;
return t;
}
//取栈顶元素
public T peek() throws StackEmptyException {
if (size<1)
throw new StackEmptyException("错误,堆栈为空。");
return top.getData();
}
//测试:将10进制数转换成8进制数
public static void main(String args[]){
System.out.println("请输入十进制数");
java.util.Scanner in=new java.util.Scanner(System.in);
int i=in.nextInt();
int temp=i;
Stack<Integer> s=new Stack<Integer>();
while(i>0){
s.push(i%8);
i=i/8;
}
System.out.println("十进制数"+temp+"转换成8进制数是:");
while(!s.isEmpty())
System.out.print(s.pop());
}
}
interface StackInterface<T> {
//返回堆栈的大小
public int getSize();
//判断堆栈是否为空
public boolean isEmpty();
//数据元素e入栈
public void push(T t);
//栈顶元素出栈
public T pop() throws StackEmptyException;
//取栈顶元素
public T peek() throws StackEmptyException;
}
class Node< T> {
private T data;
private Node< T> next;
public Node() {
this(null,null);
}
public Node(T data, Node< T> next) {
this.data = data;
this.next = next;
}
public T getData(){
return data;
}
public void setData(T data){
this.data=data;
}
public Node<T> getNext(){
return this.next;
}
public void setNext(Node<T> next){
this.next=next;
}
}
//堆栈为空时出栈或取栈顶元素抛出此异常
class StackEmptyException extends RuntimeException{
public StackEmptyException(String err) {
super(err);
}
}
代码下载:
分享到:
相关推荐
本话题将深入探讨如何使用链式栈实现递归和非递归的迷宫路径求解方法,结合Java编程语言,以及深度优先搜索(DFS)策略。 首先,我们要理解链式栈是一种基于链表的数据结构,它支持栈的基本操作——压入(push)和...
在本案例中,我们主要探讨的是顺序存储方式下的栈实现。 #### 三、MyStack类详解 ##### 1. 类成员变量 - `int MAX_SIZE`: 定义了栈的最大容量,默认为100。 - `int top`: 栈顶指针,初始值为-1,表示栈为空。 - `...
17循环链表 18双项链表 19链式栈 20链式队列 21STL_list类 22基数排序 23属 24二叉树 25二叉树找数 26红黑树 27红黑树_0 28红黑树_1 29红黑树_2 30红黑树_3 31红黑树_4 32红黑树_5 33红黑树_6 34堆 35堆排序 36...
Java中栈的实现可以使用`java.util.Stack`类,它是`Vector`类的子类,提供了`push()`, `pop()`, `peek()`等方法。 在给定的文件“王倩”中,很可能包含了实现这些数据结构的Java源代码。通过阅读和理解这些代码,你...
由于提供的文本信息是关于一篇有关Java实现链式结构的数据结构文章的一部分,因此下面将从文章的标题、描述、标签以及提供的部分内容中提炼出相关的知识点。 知识点: 1. Java的动态内存机制: Java采用动态内存...
JAVA语言实现数据的链式结构 分享下挣挣人气
以下是Java栈之链式栈存储结构的实现代码的相关知识点: 一、链栈的定义 链栈是一种使用链表来存储元素的栈结构。在链栈中,每个元素都是一个独立的对象,节点中保存着数据和指向下一个节点的引用。链栈的实现可以...
在Java中,可以使用`java.util.Stack`类来实现栈的功能。对于运算符的优先级处理,可以定义一个优先级表,常见的运算符优先级如下: - 左括号 '(' 的优先级最低。 - 乘法 '*' 和除法 '/' 的优先级高于加法 '+' 和...
在`demo5栈_链式存储`这个压缩包中,很可能包含了实现这些功能的C/C++或Java代码示例。通过阅读和理解这些代码,你可以更好地了解链式存储栈的工作原理和实际编程中的应用。此外,这些代码还可以作为学习和进一步...
以下是一个简单的栈实现: ```java public class MyStack { private LinkedList<Object> ll = new LinkedList(); public void push(Object o) { ll.addFirst(o); } public Object pop() { return ll....
本主题将详细探讨队列和栈的封装,包括顺序栈、链式栈、顺序队以及链式队。 1. **栈(Stack)**: - **定义**:栈是一种后进先出(Last In First Out, LIFO)的数据结构,类似于现实中的堆叠物品,最后放入的物品...
在编程语言中,如C++、Java或Python,可以使用结构体或类来表示链式栈的节点,节点包含数据和指向下一个节点的指针。例如,使用C++的实现可能如下: ```cpp struct Node { int data; Node* next; }; class Stack...
《数据结构(Java版)(第3版)》是由叶核亚编著的一本经典教材,专注于讲解如何在Java编程环境中实现和应用数据结构。这本书是计算机科学与技术专业学生和程序员的重要参考资料,旨在帮助读者深入理解数据结构的...
以下是链式栈的实现: ```java public class LinearNode { private Object element; private LinearNode next; public LinearNode(Object element) { this.element = element; this.next = null; } public...
链式栈是一种以链表作为底层数据结构实现的栈,相比于数组实现的栈,它在动态扩展容量时更加灵活。链式栈通常包含入栈(push)、出栈(pop)、查看栈顶元素(peek)等基本操作。 接着是"LineStack.java",这个文件...
栈也可以通过链表来实现,这种实现方式称为链式栈。链式栈的实现更为灵活,能够动态地调整栈的空间大小。具体步骤如下: 1. **初始化**:创建一个指向栈顶节点的指针,初始时指向 `null`。 2. **入栈**:创建一个新...
【数据结构课程设计】 数组 实现一个支持动态扩容的数组 ... 用链表实现一个链式栈 编程模拟实现一个浏览器的前进、后退功能 队列 用数组实现一个顺序队列 用链表实现一个链式队列 实现一个循环队列 ......
- **链式栈**:基于链表实现的栈,使用链表的节点来存储栈中的元素。入栈操作就是在链表头部添加节点,出栈操作则是删除链表头部的节点。链式栈的好处在于不需要预先确定大小,可以动态扩展。 #### 示例代码 以下...
Java中的Stack类是Vector类的子类,可以很方便地实现栈操作,如push()、pop()和peek()。 3. **队列**:队列是一种先进先出(FIFO)的数据结构,常用于任务调度、缓冲区等。Java提供了LinkedList和ArrayDeque两种...