Java------数据结构之栈与队列(简单讲解)

本篇碎碎念:时隔n个月,继续写博客,假期落下的进度,在开学后努力追赶,假期不努力,开学徒伤悲啊,此时此刻真想对自己说一句,活该啊~~~~

欠下的链表练习题讲解会在下次更新~~~~

今日份励志文案: 万物皆有裂痕,那是光照进来的地方

一.栈

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。

栈中的元素遵守后进先出LIFO原则

栈的相关使用方法

        Stack<Integer> stack=new Stack<>();
        //入栈
        stack.push(1);
        stack.push(2);
        stack.push(3);

        System.out.println(stack);
        //弹出并获取栈顶元素
        int a=stack.pop();
        System.out.println(a);

        //获取栈顶元素
        int b=stack.peek();
        System.out.println(b);
        System.out.println(stack);

        //判断栈是否为空
        boolean c=stack.isEmpty();
        System.out.println(c);

        //判断栈的大小
        int d=stack.size();
        System.out.println(d);

练习题:
1. 若进栈序列为 1,2,3,4 ,进栈过程中可以出栈,则下列不可能的一个出栈序列是()
A: 1,4,3,2                 B: 2,3,4,1                 C : 3,1,4,2             D: 3,4,2,1

20. 有效的括号 - 力扣(LeetCode)

这两道题的答案与讲解会在末尾公布


二.队列

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表

队列具有先进先出FIFO原则

入队列:进行插入操作的一端称为队尾(Tail/Rear) \

出队列:进行删除操作的一端称为队头

public static void main(String[] args){
        Queue<Integer> q = new LinkedList<>();
        q.offer(1);
        q.offer(2);
        q.offer(3);
        q.offer(4);
        q.offer(5); // 从队尾入队列

        System.out.println("队列中的元素个数为:");
        System.out.println(q.size());

        System.out.println("队列中队头元素为:");
        System.out.println(q.peek()); // 获取队头元素
        // 从队头出队列,并将删除的元素返回
        q.poll();
        System.out.println("经过一个p.poll()剩下的元素为:");
        System.out.println(q);
        
        if(q.isEmpty()){
            System.out.println("队列空");
        }else{
            System.out.println(q.size());
        }
    }


 练习题:
1. 若进栈序列为 1,2,3,4 ,进栈过程中可以出栈,则下列不可能的一个出栈序列是(C)
A: 1,4,3,2                 B: 2,3,4,1                 C : 3,1,4,2             D: 3,4,2,1

20. 有效的括号 - 力扣(LeetCode)


填空题

编程题

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack=new Stack<>();
       

        for(int i=0;i<s.length();i++){
            char count=s.charAt(i);
            if(count=='('||count=='{'||count=='['){
                stack.push(count);
            }else{
                if(stack.empty()){
                    return false;
                }

                char count1=stack.peek();
                if(count==')'&&count1=='('||
                count=='}'&&count1=='{'
                ||count==']'&&count1=='['){
                    stack.pop();
                }else{
                    return false;
                }
                
            }
        }
      return stack.empty();
    }
}

题目要求 

1.左括号必须用相同类型的右括号闭合。

2.左括号必须以正确的顺序闭合。

3每个右括号都有一个对应的相同类型的左括号。


问题1:我们如何遍历字符串?                

问题2:如何判断是相同类型的括号?


解1:可以用for循环或者while循环(我用的是for循环) 

解2:创建一个栈(先进后出原则),如果为左括号就进栈

        如果为右括号就与刚进栈的左括号“配对”

“配对”方式,设置两个char变量,count与count1

if(count==')'&&count1=='('||count=='}'&&count1=='{'||count==']'&&count1=='[')

“配对”成功,左括号出栈,继续走循环,“配对失败”返回false

如果栈中没有左括号,同时来了个右括号要配对,要返回false


 最后还有两道练习题,大家可以尝试一下

如果有解释的不对或者不清晰,如果可以从评论区指出,我一定会加以修改,万分感谢

希望对你们有所帮助

  • 35
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
当谈到数据结构Java代码实现时,有许多不同的数据结构可供选择,例如数组、链表、栈、队列、树、图等等。我将以链表作为例子来进行讲解。 链表是一种常见的数据结构,它由一个节点的集合组成,每个节点包含两部分:数据和指向下一个节点的指针。以下是一个简单的链表的Java代码实现: ```java // 定义链表节点类 class Node { int data; Node next; // 构造函数 public Node(int data) { this.data = data; this.next = null; } } // 定义链表类 class LinkedList { Node head; // 构造函数 public LinkedList() { this.head = null; } // 在链表末尾添加节点 public void append(int data) { Node newNode = new Node(data); if (head == null) { head = newNode; } else { Node current = head; while (current.next != null) { current = current.next; } current.next = newNode; } } // 打印链表元素 public void printList() { Node current = head; while (current != null) { System.out.print(current.data + " "); current = current.next; } } } // 测试链表类 public class Main { public static void main(String[] args) { LinkedList list = new LinkedList(); // 向链表中添加节点 list.append(1); list.append(2); list.append(3); // 打印链表元素 list.printList(); // 输出: 1 2 3 } } ``` 以上代码演示了如何使用Java实现一个简单的链表数据结构。你可以通过添加其他方法来实现链表的其他操作,如插入节点、删除节点等。希望这个例子能够帮助你理解数据结构Java代码实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值