作者简介
作者名:编程界明世隐
简介:CSDN博客专家,从事软件开发多年,精通Java、JavaScript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢迎您关注,期待与您一起学习、成长、起飞!
引言
很多Java初学者问我,新手明明很用心、很努力学习的Java知识,转头又忘记了,很让人犯愁,小白如何能够快速成长、成为大牛呢?
其实要成为大神的技巧只有一个:“多学多练”,于是明哥就整理了比较典型的练习实例,通过练习能够快速提升编码技巧和熟练度,让你在成为大佬的路上一去不复返(切记要亲手练习哦)!
导航
✪ Java小白入门200例系列目录索引
◄上一篇【125】用C3P0连接Mysql实例
►下一篇【127】待更新
热门专栏推荐
【1】Java小游戏(俄罗斯方块、植物大战僵尸等)
【2】JavaWeb项目实战(图书管理、宿舍管理等)
【3】JavaScript精彩实例(飞机大战、验证码等)
【4】Java小白入门200例
【5】从零学Java、趣学Java
【6】Idea从零到精通
定义元素类
定义一个Node类,用来作为栈的元素对象。
package stack;
//定义一个Node,用来作为栈的元素对象
public class Node<T> {
T data;//用来存储数据
Node prev;//上一个元素
public Node(T data) {
this.data = data;
}
}
定义接口
package stack;
/**
* 栈操作定义
*/
public interface Stack<T> {
/* 判空 */
Boolean isEmpty();
/* 清空栈 */
void clear();
/* 弹栈 */
T pop();
/* 入栈 */
Boolean push(T data);
/* 栈的长度 */
int length();
/* 查看栈顶的元素,但不移除它 */
T peek();
/* 返回对象在栈中的位置 */
int search(T data);
/* 获取下一个元素 */
T next();
}
自定义栈
package stack;
//自定义栈,单向链表方式
public class MyStack<T> implements Stack<T> {
private Node<T> top;//定义栈顶
private int size;//栈的长度
private Node<T> tmp = null;//临时元素,用来迭代
@Override
public Boolean isEmpty() {//是否为空栈
return size == 0;
}
@Override
public void clear() {//清空栈
top = null;
size = 0;
}
@Override
public T pop() {//弹出栈
T topValue = null;
if (top != null) {
topValue = top.data;
Node oldTop = top;
top = top.prev;
oldTop.prev = null;
size--;
}
return topValue;
}
@Override
public Boolean push(T data) {//入栈
Node oldTop = top;
top = new Node(data);
top.prev = oldTop;
size++;
return true;
}
@Override
public int length() {
return size;
}
@Override
public T peek() {
T topValue = null;
if (top != null) {
topValue = top.data;
}
return topValue;
}
@Override
public int search(T data) {//搜索
int index = -1;
Node tmp = top;
for (int i = size - 1; i > -1; i--) {
if (tmp.data.equals(data)) {
index = i;
break;
} else {
tmp = tmp.prev;
}
}
tmp = null;
return index;
}
/**
* 获取指定元素
*/
public T getElement(int index) {
Node<T> tmp = top;
for (int i = 0; i < size; i++) {
if (i == index) {
return tmp.data;
}
tmp = tmp.prev;
}
return null;
}
@Override
//迭代元素用
public T next() {
T data = null;
if (tmp == null) {
return null;
}
data = tmp.data;
tmp = tmp.prev;
return data;
}
//迭代时先调用此方法回到栈顶
public void goTop() {
tmp = top;
}
@Override
public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append("链表栈的内容是:[");
Node tmp = top;
for (int i = 0; i < size - 1; i++) {
buffer.append(tmp.toString() + ",");
tmp = tmp.prev;
}
tmp = null;
buffer.append("]");
buffer.replace(buffer.lastIndexOf(","), buffer.lastIndexOf(",") + 1, "");
return super.toString();
}
}
测试类
package stack;
public class Test {
public static void main(String[] args) {
MyStack myStack = new MyStack();
//入栈
myStack.push("明世隐");
myStack.push("小鲁班");
myStack.push("公孙离");
myStack.push("后裔");
myStack.push("狄仁杰");
System.out.println("栈的长度是:"+myStack.length());
int index = myStack.search("后裔");
System.out.println("查找元素的下标是:"+index);
//长度
int len = myStack.length();
//回到栈顶,确保从栈顶循环下来
myStack.goTop();
//开始循环
for (int i=0;i<len;i++){
System.out.println("元素:"+myStack.next());
}
//查看栈顶元素
System.out.println("栈顶的元素是:"+myStack.peek());
//出栈,栈顶被出
System.out.println("出栈的元素是:"+myStack.pop());
System.out.println("出栈后栈顶的元素是:"+myStack.peek());
//判断栈是否有元素
System.out.println("栈是否为空:"+myStack.isEmpty());
//清空栈
System.out.println("=====清空栈======");
myStack.clear();
//判断栈是否有元素
System.out.println("栈是否为空:"+myStack.isEmpty());
}
}
运行结果:
栈的长度是:5
查找元素的下标是:3
元素:狄仁杰
元素:后裔
元素:公孙离
元素:小鲁班
元素:明世隐
栈顶的元素是:狄仁杰
出栈的元素是:狄仁杰
出栈后栈顶的元素是:后裔
栈是否为空:false
清空栈
栈是否为空:true
小结
这节总结了“ 单向链表实现栈 ”,希望能对大家有所帮助,请各位小伙伴帮忙 【点赞】+【收藏】+ 【评论区打卡】, 如果有兴趣跟小明哥一起学习Java的,【关注一波】不迷路哦。
评论区打卡一波让我知道你,明哥会持续关注你的学习进度哦!
导航
✪ Java小白入门200例系列目录索引
◄上一篇【125】用C3P0连接Mysql实例
►下一篇【127】待更新
热门专栏推荐
【1】Java小游戏(俄罗斯方块、植物大战僵尸等)
【2】JavaWeb项目实战(图书管理、宿舍管理等)
【3】JavaScript精彩实例(飞机大战、验证码等)
【4】Java小白入门200例
【5】从零学Java、趣学Java
【6】Idea从零到精通