顺序栈,链栈,队列java实现
顺序栈
/**
* 顺序栈
* */
public class SqStack {
//栈的大小
private int maxSize;
//栈顶指针
private int top; private char[] stack; public SqStack(int size){
maxSize = size;
top = -1;
stack = new char[maxSize];
}
//压栈
public void push(char value){
stack[++top] = value;
}
//出栈
public char pop(){
return stack[top--];
}
//返回栈顶指针
public char peek(){
return stack[top];
}
//栈是否满
public boolean idFull(){
return maxSize-1==top;
}
//栈是否为空
public boolean isEmpty(){
return top==-1;
}
}
测试
SqStack sqStack = new SqStack(10);
sqStack.push('a');
sqStack.push('b');
System.out.println(sqStack.pop());
System.out.println(sqStack.pop());
输出
链栈
import sun.awt.image.ImageWatched; /**
* 链栈
* */
public class LinkStack {
/**
* @param size 栈的大小
* @param top 栈顶指针
* */
private int size;
private Node top =null; class Node{
int data;
Node next = null;
public Node(int data){
this.data = data;
}
} /**
* 压栈
* @param data 节点数据
* */
public void push(int data){
Node node = new Node(data);
node.next = top;
top = node;
size++;
} /**
* 出栈
* */
public int pop()throws Exception{
if(top==null)
throw new Exception("空的");
else {
int data = top.data;
top = top.next;
size--;
return data;
}
}
public int getSize(){
return size;
}
public boolean isEmpty(){
return size==0;
}
public void showAllNode() throws Exception{
if(top==null)
throw new Exception("空栈");
else {
Node node = top;
while (node!=null){
System.out.println(node.data);
node = node.next;
}
}
}
}
测试
LinkStack stack = new LinkStack();
stack.push(2);
stack.push(3);
stack.showAllNode();
结果
队列
点类
public class Node<T> {
//存储的数据
private T data;
//下一个节点
private Node<T> next; public Node(T data){
this.data = data;
} public T getData() {
return data;
} public void setData(T data) {
this.data = data;
} public Node<T> getNext() {
return next;
} public void setNext(Node<T> next) {
this.next = next;
}
}
队列类
public class LinkQuene {
//头
private Node<Integer> front;
//尾
private Node<Integer> rear;
//大小
private int size; /**
* 创建队列
* */
public LinkQuene(){
front = rear = null;
}
/**
* 入列
* @param data 节点数据
* */
public void enter(Integer data){
Node<Integer> node = new Node<>(data);
if(isEmpty()){
front = rear = node;
}else{
rear.setNext(node);
rear = node;
}
size++;
}
/**
* 出列
* */
public Integer out(){
Node node = new Node(-1);
if(isEmpty()){
System.out.println("队列是空的");
return (Integer) node.getData();
}else {
node = front;
front = node.getNext();
node.setNext(null);
size--;
}
if(size==0){
front = null;
rear = null;
}
return (Integer) node.getData();
} /**
* 判断是否为空
* */
public boolean isEmpty(){
return front==null&&rear==null?true:false;
}
/**
* 得到个数
* */
public int getSize(){
return this.size;
}
}
测试:
LinkQuene quene = new LinkQuene();
quene.enter(1);
quene.enter(2);
System.out.println(quene.getSize());
System.out.println(quene.out());
System.out.println(quene.getSize());
结果
顺序栈,链栈,队列java实现的更多相关文章
- java与数据结构(6)---java实现链栈
栈之链式存储结构链栈 链栈 栈的链式存储结构成为链栈.链栈是没有头结点,头结点就是栈顶指针top. 代码结构 package list; public interface Stackable;公共接口 ...
- 栈(存储结构链表)--Java实现
/*用链表实现栈--链栈 * */ public class MyLinkedStack { public MyLinkedList linklist; int items; public MyLin ...
- c/c++ 链栈
c/c++ 链栈 链栈 下面的代码实现了以下功能 函数 功能描述 push 压入 pop 弹出 show_list 打印 clear 释放所有内存空间 destroy 释放所有内存空间 nodesta ...
- 【Java】 大话数据结构(6) 栈的顺序与链式存储
本文根据<大话数据结构>一书,实现了Java版的栈的顺序存储结构.两栈共享空间.栈的链式存储机构. 栈:限定仅在表尾进行插入和删除操作的线性表. 栈的插入(进栈)和删除(出栈)操作如下图所 ...
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...
- 2018.9.5 Java中使用栈来模拟队列
栈的规律是是先进后出 队列的规律是先进先出 栈模拟队列 首先我们定义两个栈,一个放数据,一个出数据,判断B栈是否有元素,有元素则直接pop:没有元素则需要我们将A里面的元素出栈然后放到B里面,再取出, ...
- JAVA:使用栈实现一个队列
使用栈实现一个队列,需要弄清楚栈和队列的区别: 栈:先进后出: 队列:先进先出. 实现思路: 1)通过两个栈(pushStack / popStack)对倒,确保 popStack 栈的出栈顺序与队列 ...
- (超详细)动手编写 — 栈、队列 ( Java实现 )
目录 前言 栈 概念 栈的设计 编码实现 小结 队列 概念 队列的设计 编码实现 双端队列 概念 设计 编码 循环队列 循环队列 循环双端队列 声明 前言 栈 概念 什么是栈? **栈 **:是一种特 ...
- 数据结构——Java实现链栈
一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 链栈是指采用链式存储结构实现的 ...
随机推荐
- 关于.gitignore无法过滤某些文件
.gitignore文件用于忽略那些无需添加到版本管理的文件.但最近发现有些文件即使被加入到了.gitignore文件中,push时仍会被上传. 原因:如果某些文件已经被纳入了版本管理中,就算是在.g ...
- java命令分析线程死锁以及内存泄漏
一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...
- IOS Javascript Date的坑
Date对象是JavaScript提供的日期和时间的操作接口,它有多种用法.手册上或者网上也有很多文章介绍,这里就不再次复述了. 上次遇到一个坑,这里总结下,也不是什么大问题,若是如果有经验,就不会花 ...
- IIS7发布asp.net mvc提示404.0
https://support.microsoft.com/zh-cn/help/980368/a-update-is-available-that-enables-certain-iis-7-0-o ...
- CSS的六大选择器
选择器:选择器是一种模式,用于选择需要添加样式的元素. 首先简述六大选择器 基本选择器 标签选择器 类选择器 ID选择器 高级选择器 层次选择器 结构伪类选择器 属性选择器 其中基本选择器与层次选择器 ...
- epoll_wait会被系统中断唤醒
今天,当一个程序在epoll_wait阻塞时,用strace跟踪了一下,结果epoll_wait就被EINTR唤醒了,并且返回-1: 所以,当epoll_wait返回-1时,需要判断errno是不是E ...
- JSP :使用<%@include%>报Duplicate local variable path 错误
今天在做商城页面,遇到问题: <%@include file="menu.jsp" %> 错误提示: Multiple annotations found at thi ...
- shell脚本监控系统负载、CPU和内存使用情况
hostname >>/home/vmuser/xunjian/xj.logdf -lh >>/home/vmuser/xunjian/xj.logtop -b -n 1 | ...
- left join on 和where中条件的放置位置
转自:http://blog.csdn.net/muxiaoshan/article/details/7617533 select * from td left join (select case_ ...
- GitHub上好的Java项目
1. java-design-patterns(Star:36k)Github地址:https://github.com/iluwatar/java-design-patterns 介绍:设计模式是形 ...