「java栈接口」java栈的操作

博主:adminadmin 2023-01-20 14:42:08 340

本篇文章给大家谈谈java栈接口,以及java栈的操作对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java课设报告图形化显示数据进栈出栈过程

pre t="code" l="java"//栈接口

/**

* 2016/10/31 10:19

*

* @author 3306 TODO

*/

public interface StackInterfaceT {

/**

* 压入元素

*

* @param element 元素

*/

void push(T element);

/**

* 弹出栈顶元素

*

* @return T

*/

T pop();

}pre t="code" l="java"//固定长度栈

/**

* 2016/10/31 10:03

*

* @param T 压入元素类型

* @author 3306 TODO 固定长度栈

*/

public class FixedStackT implements StackInterfaceT{

private Object[] objects = new Object[10];

private int index = 0;

/**

* 往固定长度栈压入元素

*

* @param element 元素

* @throws IndexOutOfBoundsException 压缩元素大于栈的容量的时候

*/

public void push(T element) {

if (index objects.length) {

throw new IndexOutOfBoundsException();

}

objects[index++] = element;

}

/**

* 弹出栈顶元素

*

* @return T

*/

public T pop() {

if (index 0) {

throw new IndexOutOfBoundsException();

}

return (T) objects[--index];

}

}pre t="code" l="java"//动态栈

import java.util.ArrayList;

import java.util.List;

/**

* 2016/10/31 10:23

*

* @author 3306 TODO

*/

public class FreeStackT implements StackInterfaceT {

private ListT storage = new ArrayList();

private int index = 0;

@Override

public void push(T element) {

if (null == element) {

throw new IllegalArgumentException();

}

storage.add(element);

index++;

}

@Override

public T pop() {

if (index 0) {

throw new IndexOutOfBoundsException();

}

return storage.get(--index);

}

}pre t="code" l="java"//student类

/**

* 2016/10/31 10:11

*

* @author 3306 TODO

*/

public class Student {

private int studentNo;

private String studentName;

public int getStudentNo() {

return studentNo;

}

public void setStudentNo(int studentNo) {

this.studentNo = studentNo;

}

public String getStudentName() {

return studentName;

}

public void setStudentName(String studentName) {

this.studentName = studentName;

}

@Override

public String toString() {

return "Student{" +

"studentNo=" + studentNo +

", studentName='" + studentName + '\'' +

'}';

}

}pre t="code" l="java"//测试类

/**

* 2016/10/31 10:12

*

* @author 3306 TODO

*/

public class TestStack {

public static void main(String[] args) {

testStableStack();

testFreeStack();

}

private static void testStableStack() {

System.out.println("\n\n----------- fixed ------------");

StackInterfaceStudent myStack = new FixedStack();

int numOfStudent = 3;

for (int index = 0; index numOfStudent; index++) {

Student stu = new Student();

stu.setStudentNo(index);

stu.setStudentName("stu" + index);

myStack.push(stu);

}

for (int index = 0; index numOfStudent; index++) {

System.out.println(myStack.pop());

}

}

private static void testFreeStack() {

System.out.println("\n\n----------- free ------------");

StackInterfaceStudent freeStack = new FreeStack();

int numOfStudent = 5;

for (int index = 0; index numOfStudent; index++) {

Student stu = new Student();

stu.setStudentNo(index);

stu.setStudentName("stu" + index);

freeStack.push(stu);

}

for (int index = 0; index numOfStudent; index++) {

System.out.println(freeStack.pop());

}

}

}

java内部有没有定义好的栈的类?

有。

数据结构中的栈,在解决很多问题都有用处,比如括号匹配,迷宫求解,表达式求值等等,java中有封装好的类,可以直接调用。

使用链表来实现栈比用数组更加方便,也易于节省空间,因为栈只能在栈顶进行操作,不需要进行随机访问栈元素。首先实现栈接口IStack,提供出栈、入栈、获取栈顶元素、判断是否为空以及清空栈等基本功能:定义一个Node类,用于保存链中点的信息。

栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。

栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。

java:编写数据访问接口,再分别以堆栈和队列的形式实现

链队列的定义:

队列的链式存储结构简称为链队列。它是限制仅在表头删除和表尾插入的单链表。

链队列的数据存储形式:

链队列基本运算的实现:

[java] view plain copy

package study_02.datastructure.queue;

/**

* 链队列

* @author WWX

*/

public class LinkQueueT {

//链的数据结构

private class Node{

public T data;

public Node next;

//无参构造函数

public Node(){}

public Node(T data,Node next){

this.data=data;

this.next=next;

}

}

//队列头指针

private Node front;

//队列尾指针

private Node rear;

//队列长度

private int size=0;

public LinkQueue(){

Node n=new Node(null,null);

n.next=null;

front=rear=n;

}

/**

* 队列入队算法

* @param data

* @author WWX

*/

public void enqueue(T data){

//创建一个节点

Node s=new Node(data,null);

//将队尾指针指向新加入的节点,将s节点插入队尾

rear.next=s;

rear=s;

size++;

}

/**

* 队列出队算法

* @return

* @author WWX

*/

public T dequeue(){

if(rear==front){

try {

throw new Exception("堆栈为空");

} catch (Exception e) {

e.printStackTrace();

}

return null;

}else{

//暂存队头元素

Node p=front.next;

T x=p.data;

//将队头元素所在节点摘链

front.next=p.next;

//判断出队列长度是否为1

if(p.next==null)

rear=front;

//删除节点

p=null;

size--;

return x;

}

}

/**

* 队列长队

* @return

* @author WWX

*/

public int size(){

return size;

}

/**

* 判断队列是否为空

* @return

* @author WWX

*/

public boolean isEmpty(){

return size==0;

}

public String toString() {

if(isEmpty()){

return "[]";

}else{

StringBuilder sb = new StringBuilder("[");

for(Node current=front.next;current!=null;current=current.next){

sb.append(current.data.toString() + ", ");

}

int len = sb.length();

return sb.delete(len - 2, len).append("]").toString();

}

}

//测试

public static void main(String[] args) {

LinkQueueInteger queue=new LinkQueueInteger();

queue.enqueue(1);

queue.enqueue(2);

queue.enqueue(3);

queue.enqueue(4);

queue.enqueue(5);

queue.enqueue(6);

System.out.println(queue);

System.out.println("出队:"+queue.dequeue());

System.out.println("队列长度="+queue.size());

System.out.println(queue);

System.out.println("出队:"+queue.dequeue());

System.out.println("队列长度="+queue.size());

System.out.println(queue);

System.out.println("出队:"+queue.dequeue());

System.out.println("队列长度="+queue.size());

System.out.println(queue);

}

}

输出结果:

[1, 2, 3, 4, 5, 6]

出队:1

队列长度=5

[2, 3, 4, 5, 6]

出队:2

队列长度=4

[3, 4, 5, 6]

出队:3

队列长度=3

[4, 5, 6]

JAVA 作业 编写固定长度栈和动态栈,完成入栈和出栈。(注:测试接口。)

//栈接口

/**

 * 2016/10/31 10:19

 *

 * @author 3306 TODO

 */

public interface StackInterfaceT {

    /**

     * 压入元素

     *

     * @param element 元素

     */

    void push(T element);

    /**

     * 弹出栈顶元素

     *

     * @return T

     */

    T pop();

}

//固定长度栈

/**

 * 2016/10/31 10:03

 *

 * @param T 压入元素类型

 * @author 3306 TODO 固定长度栈

 */

public class FixedStackT implements StackInterfaceT{

    private Object[] objects = new Object[10];

    private int index = 0;

    /**

     * 往固定长度栈压入元素

     *

     * @param element 元素

     * @throws IndexOutOfBoundsException 压缩元素大于栈的容量的时候

     */

    public void push(T element) {

        if (index  objects.length) {

            throw new IndexOutOfBoundsException();

        }

        objects[index++] = element;

    }

    /**

     * 弹出栈顶元素

     *

     * @return T

     */

    public T pop() {

        if (index  0) {

            throw new IndexOutOfBoundsException();

        }

        return (T) objects[--index];

    }

}

//动态栈

import java.util.ArrayList;

import java.util.List;

/**

 * 2016/10/31 10:23

 *

 * @author 3306 TODO

 */

public class FreeStackT implements StackInterfaceT {

    private ListT storage = new ArrayList();

    private int index = 0;

    @Override

    public void push(T element) {

        if (null == element) {

            throw new IllegalArgumentException();

        }

        storage.add(element);

        index++;

    }

    @Override

    public T pop() {

        if (index  0) {

            throw new IndexOutOfBoundsException();

        }

        return storage.get(--index);

    }

}

//student类

/**

 * 2016/10/31 10:11

 *

 * @author 3306 TODO

 */

public class Student {

    private int studentNo;

    private String studentName;

    public int getStudentNo() {

        return studentNo;

    }

    public void setStudentNo(int studentNo) {

        this.studentNo = studentNo;

    }

    public String getStudentName() {

        return studentName;

    }

    public void setStudentName(String studentName) {

        this.studentName = studentName;

    }

    @Override

    public String toString() {

        return "Student{" +

                "studentNo=" + studentNo +

                ", studentName='" + studentName + '\'' +

                '}';

    }

}

//测试类

/**

 * 2016/10/31 10:12

 *

 * @author 3306 TODO

 */

public class TestStack {

    public static void main(String[] args) {

        testStableStack();

        testFreeStack();

    }

    private static void testStableStack() {

        System.out.println("\n\n----------- fixed ------------");

        StackInterfaceStudent myStack = new FixedStack();

        int numOfStudent = 3;

        for (int index = 0; index  numOfStudent; index++) {

            Student stu = new Student();

            stu.setStudentNo(index);

            stu.setStudentName("stu" + index);

            myStack.push(stu);

        }

        for (int index = 0; index  numOfStudent; index++) {

            System.out.println(myStack.pop());

        }

    }

    private static void testFreeStack() {

        System.out.println("\n\n----------- free ------------");

        StackInterfaceStudent freeStack = new FreeStack();

        int numOfStudent = 5;

        for (int index = 0; index  numOfStudent; index++) {

            Student stu = new Student();

            stu.setStudentNo(index);

            stu.setStudentName("stu" + index);

            freeStack.push(stu);

        }

        for (int index = 0; index  numOfStudent; index++) {

            System.out.println(freeStack.pop());

        }

    }

}

都说 java 中的 栈只能在栈顶进行 插入与删除元素,想问能不能遍历整个 栈以查找到某一个特定的元素

当然可以 要看你的栈的实现是否提供改接口

java的stack类提供了以下接口

int search(Object o)

返回对象在堆栈中的位置,以 1 为基数。

关于java栈接口和java栈的操作的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。