JAVA单链表模拟栈完整代码

package DataStructure._04Stack._02LinkedListStack;

public class Node {
  public int data;
  public Node next;
  public Node() {
}
public Node(int data){
  this.data = data;
}
@Override
public String toString() {
  return
      “栈数据:{data=” + data + ‘}’;
  }
}
package DataStructure._04Stack._02LinkedListStack;
public class LinkedListStack {
  private int nums = 0;//计数
  private int maxSize = 0;//表示栈最大容量
  public Node head = new Node();//头节点不能动(永远指向栈顶)
  //有参,初始化最大容量值
   public LinkedListStack(int maxSize){
     this.maxSize = maxSize;
  }
  //判断栈空?
  public boolean isEmpty(){
     return nums == 0;
   }
  //判断栈满?
   public boolean isFull(){
     return nums == maxSize;
  }
   //push入栈
  public void push(int data){
    Node temp = head; //辅助指针
    Node newNode = new Node(data);
    if(isFull()){
      System.out.println(“栈已满!无法添加数据”);
       return;
    }
    newNode.next = temp.next;
    temp.next = newNode;
     nums++;
   }
   //pop出栈
  public int pop(){
    if(isEmpty()){
      throw new RuntimeException(“栈空!”);
     }
    int popNumber = head.next.data;//存放出栈数据
     Node temp = head.next.next;//辅助指着temp
    head.next = temp;//完成出栈
     nums–;
     return popNumber;
   }
   //遍历栈
  public void show(){
     if(isEmpty()){
      System.out.println(“栈空,无法遍历”);
       return;
     }
    Node temp = head.next;
    while(temp != null){
      System.out.println(temp);
      temp = temp.next;
    }
  }
  //查看栈顶数据
  public int lookTop(){
     if(isEmpty()){
      throw new RuntimeException(“栈空,无数据”);
     }
     return head.next.data;
  }
}

package DataStructure._04Stack._02LinkedListStack;

import java.util.Scanner;

public class TestLinkedListStack {
   public static void main(String[] args) {
    LinkedListStack lls = new LinkedListStack(4);
    boolean flag = true;
    Scanner sc = new Scanner(System.in);
    String command = null;
    while(flag){
      System.out.println(“push:入栈”);
      System.out.println(“pop:出栈”);
      System.out.println(“show:遍历栈”);
      System.out.println(“lookTop:查看栈顶数据”);
      System.out.println(“exit:退出程序”);
      System.out.println(“请选择:”);
      command = sc.next().trim();
      switch (command){
         case “push”:
          System.out.println(“请输入要入栈的数据:”);
          int data1 = sc.nextInt();
          lls.push(data1);
           break;
         case “pop”:
           int pop = 0;
           try {
            pop = lls.pop();
           } catch (Exception e) {
            System.out.println(e.getMessage());
          }
          System.out.println(“弹出数据:”+pop);
             break;
         case “show”:
           lls.show();
          break;
         case “lookTop”:
           try {
            System.out.println(“栈顶数据为:”+lls.lookTop());
           } catch (Exception e) {
            System.out.println(e.getMessage());
          }
           break;
         case “exit”:
          sc.close();
           flag = false;
           break;
         default:
          System.out.println(“命令输入有误,请仔细核对!”);
           break;
      }
    }
    System.out.println(“程序已退出。”);
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是Java单链表学生管理系统中修改学生信息的代码示例: 首先,我们需要先定义一个Student类,包含学生的各项信息,例如学号、姓名、性别、年龄等。 ```java public class Student { private int id; private String name; private String gender; private int age; // 构造函数 public Student(int id, String name, String gender, int age) { this.id = id; this.name = name; this.gender = gender; this.age = age; } // getter 和 setter 方法 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } // toString 方法,用于打印学生信息 @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", gender='" + gender + '\'' + ", age=" + age + '}'; } } ``` 接下来,我们需要定义一个单链表类,用于存储学生信息。这里只给出部分代码,供参考。 ```java public class StudentLinkedList { private StudentNode head; // 在链表尾部插入新的学生节点 public void add(Student student) { StudentNode newNode = new StudentNode(student); if (head == null) { head = newNode; return; } StudentNode temp = head; while (temp.getNext() != null) { temp = temp.getNext(); } temp.setNext(newNode); } // 根据学生学号查找节点 public StudentNode find(int id) { if (head == null) { return null; } StudentNode temp = head; while (temp != null) { if (temp.getStudent().getId() == id) { return temp; } temp = temp.getNext(); } return null; } // 修改学生信息 public void update(Student student) { StudentNode node = find(student.getId()); if (node == null) { System.out.println("该学生不存在!"); return; } node.getStudent().setName(student.getName()); node.getStudent().setGender(student.getGender()); node.getStudent().setAge(student.getAge()); } // 其他方法... } ``` 在上面的代码中,我们定义了一个`update`方法,用于修改学生信息。该方法首先根据学生学号查找到学生节点,然后将节点中的学生信息更新为新的信息。 注意,这里只是一个简单的代码示例,实际的单链表学生管理系统中可能还需要考虑到许多其他的问题,例如输入的参数是否合法、节点是否存在等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值