Queue.cpp
上传用户:chen_dj
上传日期:2013-04-22
资源大小:111k
文件大小:2k
源码类别:

多国语言处理

开发平台:

C/C++

  1. // Queue.cpp: implementation of the CQueue class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "Queue.h"
  6. #include "malloc.h"
  7. #include "stdlib.h"
  8. #include "memory.h"
  9. //////////////////////////////////////////////////////////////////////
  10. // Construction/Destruction
  11. //////////////////////////////////////////////////////////////////////
  12. CQueue::CQueue()
  13. {
  14. m_pHead=NULL;
  15. m_pLastAccess=NULL;
  16. }
  17. CQueue::~CQueue()
  18. {
  19.    PQUEUE_ELEMENT pCur=m_pHead,pTemp;//The pointer of queue chain
  20.    while(pCur!=NULL)
  21.    {
  22.    pTemp=pCur->next;
  23.    delete pCur;
  24.    pCur=pTemp;
  25.    }
  26. }
  27. int CQueue::Push(unsigned int nValue,//The value for parent node
  28.  unsigned int nIndex,//number of index in the parent node
  29.                  ELEMENT_TYPE eWeight//the weight of last path 
  30.      )
  31. {//Sort it
  32.    PQUEUE_ELEMENT pAdd,pCur=m_pHead,pPre=0;//The pointer of queue chain
  33.    
  34.    while(pCur!=NULL&&pCur->eWeight<eWeight)
  35.    {//Get the proper posption
  36.    pPre=pCur;
  37.    pCur=pCur->next;
  38.    }
  39.    pAdd=(PQUEUE_ELEMENT)new QUEUE_ELEMENT;
  40.    pAdd->nParent=nValue;
  41.    pAdd->nIndex=nIndex;
  42.    pAdd->eWeight=eWeight;
  43.    pAdd->next=pCur;
  44.    if(pPre==0)
  45.    m_pHead=pAdd;
  46.    else
  47.    pPre->next=pAdd;
  48.    return 1;
  49. }
  50. int CQueue::Pop(unsigned int *npValue,//The value for parent node
  51. unsigned int *npIndex,//number of index in the parent node
  52.                 ELEMENT_TYPE *epWeight,//the weight of last path 
  53.                 bool  bModify,//not modify the data 
  54. bool  bFirstGet//first get data,just for browse 
  55.    )
  56. {
  57. PQUEUE_ELEMENT pTemp;
  58. if(bModify) 
  59. pTemp=m_pHead;//The temp buffer
  60. else 
  61. {
  62.   if(bFirstGet)//First get the data
  63.      m_pLastAccess=m_pHead;//The temp buffer
  64.   pTemp=m_pLastAccess;
  65. }
  66. if(pTemp==NULL)
  67. return -1;//fail get the value
  68.     if(npValue!=0)
  69.        *npValue=pTemp->nParent;
  70.     if(npIndex!=0)
  71.        *npIndex=pTemp->nIndex;
  72.     if(epWeight!=0)
  73.   *epWeight=pTemp->eWeight;
  74.     if(bModify)//modify and get rid of the node
  75. {
  76.      m_pHead=pTemp->next;
  77.    delete pTemp;//free the buffer
  78. }
  79. else
  80. {
  81.        m_pLastAccess=pTemp->next;
  82.     }
  83.      return 1;
  84. }
  85. bool CQueue::IsEmpty(bool bBrowsed)//bBrowsed=true: judge whether the browse pointer got end.
  86. {
  87. if(bBrowsed==true)
  88. return (m_pLastAccess==NULL);
  89.    return (m_pHead==NULL);
  90. }
  91. bool CQueue::IsSingle()
  92. {
  93.    return (m_pHead!=NULL&&m_pHead->next==NULL);
  94. }