顺序栈,链栈,队列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实现链栈
一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 链栈是指采用链式存储结构实现的 ...
随机推荐
- Tomcat9 在Windows中配置允许远程访问
环境:Windows Server 2019 Data Center+Tomcat 9 Tomcat在Windows中安装好了之后,默认只能从本机以http://localhost:8080的方式访 ...
- Java学习笔记(十四):java常用的包
- Python中import, from...import,import...as的区别
import datetime print(datetime.datetime.now()) 以上代码实现输出系统当前时间,是引入整个datetime包,然后再调用datetime这个类中的now() ...
- redis、mysql、mongdb的比较
特点: 1-1 MySQL:1. 使用c和c++编写,并使用了多种编译器进行测试,保证源代码的可移植性2. 支持多种操作系统3. 为多种编程语言提供可API4. 支持多线程,充分利用CPU资源优化的S ...
- 微信小程序——微信卡券的领取和查看
这里大致介绍下微信卡券的一些常见问题,不再介绍具体技术了,相关接口详见微信卡券. 1. 会员卡跟卡券一样么? 这个是一样的,至少在前端是一样处理的,最多也就是卡券设置展示不同.对于微信卡券领取和查看的 ...
- Python练习-循环及切片-2018.11.27
#直接用while循环去除.ad l=['xuyutao.ad','wangjun.ad','liuchao.ad','liuyan1.ad'] n=0 L=[] while n < 4: A= ...
- centos7 微信安装
安装过程如下: ,下载最新版本tar.gz压缩包 wget https://github.com/geeeeeeeeek/electronic-wechat/releases/download/V2. ...
- 【转】Cron表达式详解
Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: (1) Seconds Minutes Hours DayofMonth Mo ...
- PHP开发——常量
概念 l 常量就是值永远不变的量.如:圆周率.身份证号码等. l 所谓常量值永远不变的量,是指在一次完整的HTTP请求过程中. l 常量在程序运行过程中,不能修改.也不能删除. l 常量比变量 ...
- 巧克力分配问题——C语言
某品牌巧克力使用500克原料可制作55小块巧克力,请编程实现:输入原料重量(以千克为单位),计算出制作巧克力的块数(四舍五入).然后对这些巧克力进行分包,小盒放11块,大盒放24块,问各分装多少大盒多 ...