首页 > 其他分享 >9.23栈的链式和数组实现

9.23栈的链式和数组实现

时间:2023-09-23 20:12:26浏览次数:41  
标签:9.23 return top value next 数组 链式 array public


//栈的链表实现 import java.util.Iterator;
public class Main {
public static void main(String[] args) {
LinkedListStack<Integer> l = new LinkedListStack<>(5);
l.push(1);
l.push(2);
l.push(3);
Iterator<Integer> i = l.iterator();
while (i.hasNext()) {
System.out.print(i.next() + " ");
}
System.out.println();
System.out.println(l.peek());
l.pop();
l.query();
}

public static class LinkedListStack<E> {
private int capacity;//设置的最大容量
private int size;//实际大小
private Node<E> head = new Node<>(null, null);

public LinkedListStack(int capacity) {
this.capacity = capacity;
}

public boolean push(E value) {
if (full()) {
return false;
}
head.next = new Node<>(value, head.next);
size++;
return true;
}

public E pop() {
if (isEmpty()) {
return null;
}
Node<E> p = head.next;
head.next = p.next;
size--;
return p.value;
}

public E peek() {//查栈顶元素
if (isEmpty()) {
return null;
}
Node<E> p = head.next;
return p.value;
}

public boolean isEmpty() {
return size == 0;
}

public boolean full() {
return size == capacity;
}

public void query() {
for (int i = 0; i < size; i++) {
System.out.print(head.next.value + " ");
head = head.next;
}
System.out.println();
}

public Iterator<E> iterator() {//重写迭代器
return new Iterator<E>() {
Node<E> p = head.next;

public boolean hasNext() {
return p != null;
}

public E next() {
E value = p.value;
p = p.next;
return value;
}
};
}

static class Node<E> {
E value;
Node<E> next;

public Node(E value, Node<E> next) {
this.value = value;
this.next = next;
}
}
}
}   //栈的数组实现 import java.util.Iterator;
public class Main {
public static void main(String[] args) {
ArrayStack<Integer> l = new ArrayStack<>(5);
l.push(1);
l.push(2);
l.push(3);
Iterator<Integer> i = l.iterator();
while (i.hasNext()) {
System.out.print(i.next() + " ");
}
System.out.println();
System.out.println(l.peek());
l.pop();
l.query();
}

public static class ArrayStack<E> {
private E[] array;
private int top;//数据个数

public ArrayStack(int capacity) {
this.array = (E[]) new Object[capacity];
}

public boolean push(E value) {
if (full()) {
return false;
}
array[top]=value;
top++;
//array[top++]=value; //后加加
return true;
}

public E pop() {
if (isEmpty()) {
return null;
}
E value=array[top-1];
top--;//遍历不到即可
// E value=array[--top];
return value;
}

public E peek() {//查栈顶元素
if (isEmpty()) {
return null;
}
return array[top-1];
}

public boolean isEmpty() {
return top == 0;
}

public boolean full() {
return top== array.length;
}

public void query() {
for (int i = top-1; i >=0; i--) {
System.out.print(array[i]+ " ");
}
System.out.println();
}

public Iterator<E> iterator() {
return new Iterator<E>() {
int p=top;
public boolean hasNext() {
return p>0;
}

public E next() {
E value = array[p-1];
p--;
// E value = array[--p];
return value;
}
};
}

static class Node<E> {
E value;
}
}
}

标签:9.23,return,top,value,next,数组,链式,array,public
From: https://www.cnblogs.com/zhaoqianwan/p/17724983.html

相关文章

  • 9.23JavaScript2
    书写语法:(基本和java没区别)区分大小写:与Java一样,变量名、函数名以及其他一切东西都是区分大小写的每行结尾的分号可有可无(建议写,规范)注释:单行注释://注释内容多行注释:/*注释内容*/大括号表示代码块......
  • nodejs 字符串、数组、对象之间的相互转换
    vararr=['a','b','李四']varstr=JSON.stringify(arr)console.log(typeofstr)varobj={name:'liuneng',age:56,sex:'女'}varstr1=JSON.stringify(obj)console.log(typeofstr1)//字符串转对象//对字符串要求很高,需要单引号包住双......
  • 9.23算法
    删除链表的倒数第N个节点给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例1:输入:head=[1,2,3,4,5],n=2输出:[1,2,3,5]示例2:输入:head=[1],n=1输出:[]示例3:输入:head=[1,2],n=1输出:[1] 提示:链表中结点的数目为sz1<=sz<=300<=Node......
  • 9.23总结
    代码时间(包括上课):4h代码量(行):360今天学习了Java,针对算法与数据结构进行了学习,今天我做了两道算法题,并且学习了基本查找,二分查找,还有二分查找的升级版,以及插值查找及其升级版,还有冒泡排序和选择排序,具体可以看我其他博客。......
  • 2023.9.23
    BP8906[USACO22DEC]BreakdownP一个有向完全图(包括自环),进行\(n^2\)次删边,问每次删边后从\(1\)到\(n\)的长为\(k\)的最短路长度,或指出不存在长为\(k\)的\(1\)到\(n\)的路径。\(n\le300\),\(2\lek\le8\),\(1\lew_{i,j}\le10^8\).容易想到分层图,直接跑是\(O(......
  • springboot 接收前端数组
    前端:(黄色内容为必选项!!!)axios({url:"/access/getArr",method:"post",data:JSON.stringify([1,2,3,4]),headers:{"Content-Type":"application/json",},});后端:@RequestMapping(value=......
  • 交错数组
    概念交错数组是数组的数组,每个维度的数量可以不同。注意:二维数组的每行的列数相同,交错数组的每行的列数可能不同数组的申明1.变量类型[][] 交错数组名;int[][]arr1;2.变量类型[][] 交错数组名=new变量类型[行数][];int[][]arr1=newint[3][];3.变量类型[][......
  • 【Java 基础篇】Java 数组使用详解:从零基础到数组专家
    如果你正在学习编程,那么数组是一个不可或缺的重要概念。数组是一种数据结构,用于存储一组相同类型的数据。在Java编程中,数组扮演着非常重要的角色,可以帮助你组织、访问和操作数据。在本篇博客中,我们将从零基础开始,深入探讨Java中的数组,让你从小白变成数组专家。什么是数组?在编程......
  • 【2023潇湘夜雨】WIN11_Pro_22H2.23545.1000软件选装纯净版9.23
    【系统简介】=============================================================1.本次更新母盘来自WIN11_Pro_23H2.23545.1000。2.增加部分优化方案,手工精简部分较多。3.OS版本号为23545.1000。精简系统只是为部分用户安装,个别要求高的去MSDN下。4.集成《DrvCeo-2.13.0.8》网卡版、......
  • 【算法】数组
    1数组理论基础数组是存放在连续内存空间上的相同类型数据的集合。数组下标都是从0开始的数组内存空间的地址是连续的在删除或者增添元素时,需要移动其他元素的地址:C++要注意vector和array的区别,vector的底层实现是array,严格来讲vector是容器,不是数组。数组的元素是不能......