Java实现栈和队列数据结构
"Java语言实现的栈和队列数据结构示例代码" 在这个Java代码示例中,我们有两个类:`Node` 和 `SqStack`。`Node` 类用于构建链表,代表了栈或队列中的元素节点,而 `SqStack` 类实现了基于数组的栈操作。 首先,`Node` 类具有以下几个属性和方法: 1. `data`: 用于存储节点数据的 `Object` 类型变量。 2. `next`: 指向下一个节点的引用,类型为 `Node`。 3. `Node()`:无参构造器,初始化 `data` 为 `null` 和 `next` 也为 `null`。 4. `Node(Object data)`:单参数构造器,仅设置 `data`,`next` 仍为 `null`。 5. `Node(Object data, Node next)`:双参数构造器,设置 `data` 和 `next`。 6. `getData()`:返回节点的 `data` 值。 7. `getNext()`:返回指向下一个节点的引用。 8. `setData(Object data)`:设置节点的 `data` 值。 9. `setNext(Node next)`:设置节点的 `next` 引用。 接下来是 `SqStack` 类,它实现了栈的基本操作: 1. `stackElem`:一个 `Object` 类型的数组,用于存储栈元素。 2. `top`:一个整型变量,表示栈顶的索引,初始值为0。 3. `SqStack(int maxSize)`:构造函数,传入最大容量 `maxSize` 初始化栈,并将 `top` 设置为0。 4. `pop()`:弹出栈顶元素。如果栈为空,返回 `null`;否则,返回并移除栈顶元素。 5. `push(Object e)`:压入栈顶元素。如果栈已满,抛出异常;否则,将 `e` 压入栈并更新 `top`。 6. `display()`:打印栈中的所有元素,从栈顶到栈底。 这个实现使用了数组作为基础结构,提供了基本的栈操作,如压栈(push)和弹栈(pop)。然而,对于队列的实现,通常需要两个指针,一个指向队首(front),另一个指向队尾(rear)。在提供的代码中并没有看到队列的实现,但你可以基于 `Node` 类构建链表队列,或者使用数组实现一个循环队列。 在实际应用中,Java集合框架提供了一些内置的数据结构,如 `Stack` 类(继承自 `Vector` 类)和 `Queue` 接口(有多种实现,如 `LinkedList`, `ArrayDeque` 等)。这些内置数据结构提供了更丰富的功能和性能优化。例如,`Stack` 类提供了 `push`, `pop`, `peek` 等方法,而 `Queue` 接口的实现类提供了 `offer`, `poll`, `peek` 等队列操作。
import java.util.Scanner;
class Node {
private Object data;
private Node next;
public Node(){
this(null,null);
}
public Node(Object data){
this(data,null);
}
public Node(Object data,Node next)
{
this.data=data;
this.next=next;
}
public Object getData(){
return data;
}
public Node getNext(){
return next;
}
public void setData(Object data){
this.data=data;
}
public void setNext(Object next){
this.next=(Node) next;
}
class SqStack {
private Object[] stackElem; // 栈存储空间
private int top; // 非空栈中始终表示栈顶元素的下一个位置,当栈为空时其值为0
// 栈的构造函数,构造一个存储空间容量为maxSize的栈
public SqStack(int maxSize) {
top = 0; // 初始化top为0
stackElem = new Object[maxSize];// 为栈分配maxSize个存储单元
}
// 移除栈顶对象并作为此函数的值返回该对象
public Object pop() {
if (top == 0)// 栈为空
return null;
else {// 栈非空
return stackElem[--top];// 修改栈顶指针,并返回栈顶元素
}
}
// 将数据元素e压入栈顶
public void push(Object e) throws Exception {
if (top == stackElem.length)// 栈满
throw new Exception("栈已满");// 输出异常
else
// 栈未满
stackElem[top++] = e;
}
public void display() {
for (int i = top - 1; i >= 0; i--)
System.out.print(stackElem[i].toString() + " ");// 打印
剩余22页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展