高端建站需要什么条件,邮箱账号做网站用户名好不好,程序员培训机构,爱站网官网栈是一种数据结构#xff0c;链表也是一种数据结构。它们都是由基础的语法实现的。 如果一个数据结构可以用另外的数据结构来实现#xff0c;那么可以有力的证明——“数据结构是一种思想”#xff0c;是一种讲语法组合起来实现某种功能的手段 一、栈的特点——要实现哪些功… 栈是一种数据结构链表也是一种数据结构。它们都是由基础的语法实现的。 如果一个数据结构可以用另外的数据结构来实现那么可以有力的证明——“数据结构是一种思想”是一种讲语法组合起来实现某种功能的手段 一、栈的特点——要实现哪些功能
既然要用链表来模拟栈那么要实现哪些功能
栈是一种特殊的线性表只允许在固定一端进行插入和删除元素操作后进先出
那么对于这两个特性我们可以做出如下设想 在使用单链表的情况下从头部插入——模拟入栈头部删除——模拟出栈。同时这样操作满足了时间复杂度O1 每次向栈中插入一个元素就是向这个链表前端插入一个新的“head” 每次从栈中弹出一个元素就是从链表头部删除一个“head”然后“head head.next” 二、代码实现
public class MyStack {/*创建链表的节点*/static class Node{public int val;public Node next;public Node(int val){this.val val;}}public Node head;public int size;//实现入栈方法public void push(int val){Node node new Node(val);/*如果此时链表中没有节点那么将node设为head并将有效元素个数size加1* 如果链表中已经有元素的话将node节点头插到head节点前并设为head*/if (size 0){head node;}else {node.next head;head node;}size;}//实现出栈方法/*返回当前头节点的值并将头节点后移*/public int pop(){int h head.val;head head.next;size--;return h;}//获取栈顶元素的peek方法public int peek(){return head.val;}//判断栈是否为空public boolean empty(){return size 0;}public static void main(String[] args) {MyStack stack new MyStack();stack.push(12);stack.push(24);stack.push(26);stack.push(58);int b stack.pop();int a stack.peek();System.out.println(b);System.out.println(a);}
}