博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于双向链表的栈和队列实现
阅读量:5248 次
发布时间:2019-06-14

本文共 3095 字,大约阅读时间需要 10 分钟。

栈的实现:  
  栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶(top),相对地,把另一端称为栈底(bottom)。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
  栈接口:
1 /** 2  * 描述栈的基本操作 3  */ 4 public interface IStack
{ 5 /** 6 * 元素入栈 7 */ 8 void push(T e); 9 10 /**11 * 弹出栈顶(栈中无此元素)12 */13 T pop();14 15 /**16 * 是否空栈17 */18 boolean empty();19 20 /**21 * 栈内元素个数22 */23 int getSize();24 25 /**26 * 查看栈顶元素,不弹出27 */28 T peek();29 }
View Code

  栈的实现:

1 import java.util.EmptyStackException; 2  3 // DoubleLinkedList ListNode 前面的博客已经介绍  4 public class MyStack
extends DoubleLinkedList
implements IStack
{ 5 @Override 6 public void push(T e) { 7 super.add(e); 8 } 9 10 @Override11 public T pop() {12 if (size <= 0)13 throw new EmptyStackException();14 ListNode
the = super.last.getPre();15 T res = the.getData();16 17 the.getPre().setNext(last);18 last.setPre(the.getPre());19 the.setNext(null);20 the.setPre(null);21 size--;22 return res;23 }24 25 @Override26 public boolean empty() {27 return getSize() == 0;28 }29 30 @Override31 public int getSize() {32 return super.getSize();33 }34 35 @Override36 public T peek() {37 return last.getPre().getData();38 }39 }
View Code

队列的实现:

  队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
  队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。队列结构与日常生活中排对等候服务的模型是一致的,最早进入队列的人,最早得到服务并从队首离开;最后到来的只能排在队列的最后,最后得到服务并最后离开。
  队列接口:
1 /** 2  * 描述队列的基本操作 3  */ 4 public interface IQueue
{ 5 // 入队 6 void enqueue(T e); 7 8 // 出队 9 T dequeue();10 11 // 返回队列的大小12 int getSize();13 14 // 判断队列是否为空15 boolean empty();16 17 // 取队首元素18 T peek();19 }
View Code

  队列的实现:

1 //DoubleLinkedList ListNode 前面的博客已经介绍  2 public class MyQueue
extends DoubleLinkedList
implements IQueue
{ 3 @Override 4 public void enqueue(T e) { 5 super.add(e); 6 } 7 8 @Override 9 public T dequeue() {10 ListNode
h = first.getNext();11 first.setNext(h.getNext());12 h.getNext().setPre(first);13 h.setPre(null);14 h.setNext(null);15 size--;16 return h.getData();17 }18 19 @Override20 public boolean empty() {21 return getSize() == 0;22 }23 24 @Override25 public T peek() {26 return first.getNext().getData();27 }28 }
View Code

 

  

 

转载于:https://www.cnblogs.com/xiaoyh/p/10387048.html

你可能感兴趣的文章
多线程实现资源共享的问题学习与总结
查看>>
Learning-Python【26】:反射及内置方法
查看>>
torch教程[1]用numpy实现三层全连接神经网络
查看>>
java实现哈弗曼树
查看>>
转:Web 测试的创作与调试技术
查看>>
python学习笔记3-列表
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
线程androidAndroid ConditionVariable的用法
查看>>
stap-prep 需要安装那些内核符号
查看>>
转载:ASP.NET Core 在 JSON 文件中配置依赖注入
查看>>
socket初识
查看>>
磁盘测试工具
查看>>
代码变量、函数命名神奇网站
查看>>
redis cli命令
查看>>
Problem B: 占点游戏
查看>>
python常用模块之sys, os, random
查看>>
HDU 2548 A strange lift
查看>>
Linux服务器在外地,如何用eclipse连接hdfs
查看>>
react双组件传值和传参
查看>>