牛牧讲解:Java顺序栈原理与应用

版权申诉
0 下载量 179 浏览量 更新于2024-09-10 收藏 1.29MB PPT 举报
堆栈(Stack)是计算机科学中一种重要的数据结构,它是一种特殊类型的线性表,具有特定的插入和删除规则。与线性表不同,线性表允许在任何位置进行操作,而堆栈的操作仅限于在一端,即栈顶和栈底。这个端被称为“先进后出”(Last In First Out, LIFO)原则,意味着最后入栈的元素最先出栈。 堆栈的基本操作包括: 1. **入栈(Push)**:将数据元素添加到栈顶,代表新元素进入处理队列。 2. **出栈(Pop)**:从栈顶移除并返回数据元素,是最新的元素离开队列。 3. **取栈顶数据(Get Top)**:查看但不移除栈顶元素,获取当前队列的顶端信息。 4. **判断是否为空(Not Empty)**:检查栈是否为空,空栈返回false,非空栈返回true。 堆栈的应用广泛,例如在程序调用栈中,每当调用一个新的函数时,会将函数的返回地址、参数等信息压入栈中,函数执行完毕后,这些信息会被逐个出栈。此外,在深度优先搜索(DFS)算法中,堆栈也扮演着关键角色,用于保存待访问的节点。 顺序栈是指用数组实现的堆栈,其存储结构通过连续的内存空间来管理。顺序栈的实现通常包括设计Stack接口和实现SeqStack类,如提供push、pop、getTop和isEmpty方法。在Java编程中,栈作为一种内存管理机制,与堆有明显区别: - **栈(Stack)**:存储局部变量、方法参数等,数据在函数执行期间存在,函数结束即消失。所有基本类型和引用类型数据在栈上,生命周期与作用域关联。 - **堆(Heap)**:用于存放通过new创建的对象,是动态分配的内存,生命周期不受函数调用影响,只有当对象不再被引用时,垃圾回收器才会释放其占用的空间。 在对象的哈希码(hashCode)计算中,虽然哈希码是基于对象的特性生成的,但两个不同的对象可能有相同的哈希码,这并不意味着它们是同一个对象。因此,仅仅通过哈希码判断对象关系并不能直接反映对象间的关系,需要结合equals方法进行综合判断。 总结来说,堆栈是数据结构中的一个重要组成部分,其独特性使得它在编程中有着广泛应用,尤其是在函数调用、算法实现和内存管理等方面。理解并熟练掌握堆栈操作对于提高编程效率和正确解决复杂问题至关重要。

org.springframework.security.authentication.InternalAuthenticationServiceException: null at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:123) ~[spring-security-core-5.3.4.RELEASE.jar:5.3.4.RELEASE] at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:144) ~[spring-security-core-5.3.4.RELEASE.jar:5.3.4.RELEASE] at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:199) ~[spring-security-core-5.3.4.RELEASE.jar:5.3.4.RELEASE] at org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:95) ~[spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE] at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE] at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) [spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE] at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:92) [spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE] at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:77) [spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.9.RELEASE.jar:5.2.9.

2023-07-20 上传