丰富的线上&线下活动,深入探索云世界
做任务,得社区积分和周边
最真实的开发者用云体验
让每位学生受益于普惠算力
让创作激发创新
资深技术专家手把手带教
遇见技术追梦人
技术交流,直击现场
海量开发者使用工具、手册,免费下载
极速、全面、稳定、安全的开源镜像
开发手册、白皮书、案例集等实战精华
为开发者定制的Chrome浏览器插件
栈(Stack)是一种重要的数据结构,它具有后进先出(LastInFirstOut,LIFO)的特性,就像一个只能在一端进行插入和删除操作的容器。以下是关于栈的详细介绍:
顺序存储实现(数组):可以使用数组来实现栈。定义一个数组来存储栈中的元素,并使用一个变量来记录栈顶的位置。入栈操作时,将元素放入数组中栈顶位置的下一个位置,并更新栈顶变量;出栈操作时,将栈顶位置的元素移除,并更新栈顶变量。以下是一个简单的Java示例:
classArrayStack{privateint[]stack;privateinttop;publicArrayStack(intcapacity){stack=newint[capacity];top=-1;}publicvoidpush(intitem){if(top==stack.length-1){//栈已满,可进行扩容操作System.out.println("Stackisfull.");return;}stack[++top]=item;}publicintpop(){if(top==-1){//栈为空System.out.println("Stackisempty.");return-1;}returnstack[top--];}publicintpeek(){if(top==-1){//栈为空System.out.println("Stackisempty.");return-1;}returnstack[top];}}链式存储实现:也可以使用链表来实现栈。定义一个链表节点类,每个节点包含数据域和指向下一个节点的指针。栈顶指针指向链表的头节点,入栈操作时,创建一个新节点,并将其插入到链表的头部,使其成为新的栈顶;出栈操作时,移除链表的头节点,并更新栈顶指针。以下是一个简单的Java示例:```javaclassNode{intdata;Nodenext;
publicNode(intdata){
this.data=data;this.next=null;}}
classLinkedStack{privateNodetop;
publicvoidpush(intitem){NodenewNode=newNode(item);newNode.next=top;top=newNode;}publicintpop(){if(top==null){//栈为空System.out.println("Stackisempty.");return-1;}intdata=top.data;top=top.next;returndata;}publicintpeek(){if(top==null){//栈为空System.out.println("Stackisempty.");return-1;}returntop.data;}