数据结构-链表,队列,栈

xiaoxiao2021-02-28  55

队列和栈可以用双向循环链表实现:不需要指定头尾指针,减少了出错的概率 重点:nil节点的pre为队尾,next为队头。

队的实现:从队尾插入,队头取出。先入先出

class Queue{ Node nil; public Queue(){ //nil节点初始化,pre,next都指向nil自己 nil = new Node(); nil.pre = nil; nil.next = nil; } void enQueue(Node node){ node.pre = nil.pre; node.next = nil; nil.pre.next = node; nil.pre = node; } Node deQueue(){ if(isEmpty()) return null; Node curr = nil.next; curr.next.pre = curr.pre; curr.pre.next = curr.next; curr.pre = nil; curr.next = nil; return curr; } boolean isEmpty(){ return nil.next==nil?true:false; } } class Node{ Node pre,next; Object data; }

栈的实现:从队尾插入,队尾取出。后入先出

class Stack{ Node nil; public Stack(){ Node nil = new Node(); nil.rep = nil; nil.next = nil; } void push(Node node){ node.pre = nil.pre; node.next = nil; nil.pre.next = node; nil.pre = node; Node pop(){ if(isEmpty()) return null; Node curr = nil.pre; curr.pre.next = curr.next; curr.next.pre = curr.pre; curr.pre = nil; curr.next = nil; return curr; } boolean isEmpty(){ return nil.next==nil?true:false; } } class Node{ Node pre,next; Object data; }
转载请注明原文地址: https://www.6miu.com/read-76683.html

最新回复(0)