首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

双端队列的代码解决方法

2012-02-22 
双端队列的代码双端队列就是一个两端都是结尾的队列。队列的每一端都可以插入和移除数据项。它应该包括inser

双端队列的代码
双端队列就是一个两端都是结尾的队列。队列的每一端都可以插入和移除数据项。它应该包括insertLeft(),insertRight(),removeLeft(),removeRight(),isEmpty(),isFull()方法。要求象队列那样支持在数据末端的回绕。
如果严格禁止调用insertLeft()和removeLeft()方法(或禁用右端的操作),双端队列功能就和栈一样。
禁止调用insertLeft()和removeRight()方法(或相反的另一对方法),它的功能就和队列一样了

下面是我下的代码,不知道符合上述要求嘛,麻烦高手看下,感激不尽。

class Deque { 
  private int maxSize; //最大容量
  private long[] dequeArray; //以数组实现队列
  private int left; //队列左端
  private int right; //队列右端
  private int nItems; //计算队列中数据项的计数器,nItems==0代表空,nItems==maxSize代表满

  public Deque(int s) { //构造器,构造一个双端队列
  maxSize = s; 
  dequeArray = new long[maxSize]; 
  left = -1; 
  right = -1; 
  nItems = 0; 
  } 

  public void insertLeft(long j) { //队列左端插入方法
  if( !this.isFull() ) {  
  if(left == maxSize-1) { //支持在数据末端的回绕
  left = -1; 
  } 
  dequeArray[++left] = j; 
  nItems++; 
  } 
  } 

  public void insertRight(long j) { //队列右端插入方法

  if( !this.isFull() ) { 
  if(right == -1 || right == 0) { //支持在数据末端的回绕

  right = maxSize; 
  } 
  dequeArray[--right] = j; 
  nItems++; 
  } 
  } 

  public long removeLeft() { //队列左端移除方法
  if( !this.isEmpty() ) { 
  if(left == -1) { //支持在数据末端的回绕
  left = maxSize-1; 
  } 
  long temp = dequeArray[left--]; 
  nItems--; 
  return temp; 
  } 
  else return -1; 
  } 

  public long removeRight() { //队列右端移除方法
  if( !this.isEmpty() ) { 
  if(right == -1 || right == maxSize) { //right==-1为了防止右端没有插入新值,而直接用该方法移除左端的插入值 
  right = 0; 
  } 
  long temp = dequeArray[right++]; 
  nItems--; 
  return temp; 
  } 
  else return -1; 
  } 

  public boolean isEmpty() { //判断队列是否为空
  return (nItems == 0); 
  } 

  public boolean isFull() { //判断队列是否为满
  return (nItems == maxSize); 
  } 


public class TestDeque { 
  public static void main(String[] args) { 
  Deque theDeque = new Deque(10); 
  theDeque.insertRight(10); 
  theDeque.insertRight(20); 
  theDeque.insertRight(30); 
  theDeque.insertRight(40); 
  theDeque.insertRight(50); 
  theDeque.insertRight(60); 
  theDeque.insertRight(70); 
  theDeque.removeRight(); 
  theDeque.removeRight(); 
  theDeque.removeRight(); 
  theDeque.removeLeft(); 
  theDeque.removeLeft(); 

  while( !theDeque.isEmpty() ) { 
  long n = theDeque.removeRight(); 
  System.out.print(n); 
  System.out.print(" "); 
  } 
  System.out.println(); 
  } 




------解决方案--------------------


没有释放空间。

public ~Deque()
{
delete [] dequeArray;
}
[解决办法]
自己可以写简单的测试代码就可以测试啊
[解决办法]

探讨
没有释放空间。

public ~Deque()
{
delete [] dequeArray;
}

热点排行