亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dsimpl.h

?? 用列表實(shí)現(xiàn)的隊(duì)列和棧的算法
?? H
?? 第 1 頁 / 共 2 頁
字號(hào):
#ifndef _BASIC_DATA_STRUCTURE_TYPE_IMPLEMENTATION_SPIRIT_
#define _BASIC_DATA_STRUCTURE_TYPE_IMPLEMENTATION_SPIRIT_
#include "dstype.h"

//define the error number range for every implementation

#define SDS_ERROR_BASE_SINGLE_LIST_LOW_1 SDS_ERROR_BASE+1 //for single list impl, 50 private error number
#define SDS_ERROR_BASE_SINGLE_LIST_HIGH_1 SDS_ERROR_BASE_SINGLE_LIST_LOW_1+50

#define SDS_ERROR_BASE_QUEUE_LOW_2 SDS_ERROR_BASE_SINGLE_LIST_HIGH_1+1 //for queue impl, 50 private error number
#define SDS_ERROR_BASE_QUEUE_HIGH_2 SDS_ERROR_BASE_QUEUE_LOW_2+50

#define SDS_ERROR_BASE_STACK_LOW_3 SDS_ERROR_BASE_QUEUE_HIGH_2+1 //for stack impl, 50 private error number
#define SDS_ERROR_BASE_STACK_HIGH_3 SDS_ERROR_BASE_STACK_LOW_3+50




//CLOCKS_PER_SEC

#if !(defined(_PROGRAMMING_WITH_C_PLUS_PLUS_) && defined(_PROGRAMMING_WITH_C_))// cannot defined both at the same time
 
#if defined(_PROGRAMMING_WITH_C_PLUS_PLUS_)    // if C++ Language


/////////////////////////////////////////////////////////////////
// one single linked list implementation written by Spirit
/////////////////////////////////////////////////////////////////
class sdstd_single_list_impl:public sdstd_single_list
{
public:
	sdstd_single_list_impl(){
		listHead=NULL;
		listTail=NULL;
		listCurrent=NULL;
	}
    virtual ~sdstd_single_list_impl()
	{
		destroyList();
	}
   
virtual SDS_RESULT addHead(pssle inData); // add an element before list head
virtual SDS_RESULT addTail(pssle inData); // add an element after list tail

virtual SDS_RESULT getHead(pssle *pElement)const; // get the head element and store it to pElement buffer
virtual SDS_RESULT getTail(pssle *pElement)const; // get the tail element and store it to pElement buffer


virtual SDS_RESULT insertElement(pssle pUsher,pssle inData); // add an element after the pUsher
virtual SDS_RESULT deleteElement(pssle pUsher,pssle pElement); // deleting the element


virtual SDS_RESULT traverseInit(); //Initialization for list traverse
virtual SDS_BOOL   hasNext()const;      // detecting whether list contains more element
virtual SDS_RESULT getNext(pssle *pElement); // get the element and store it to pElement buffer

virtual SDS_BOOL   isEmpty() const;

virtual SDS_RESULT sortList(SDS_KEYTYPE (*getSortKey)(pssle pListElement),SDS_SORTMODE sortMode); // sorting this list with the specifed mode <key-up or key-down>
virtual SDS_RESULT traverseThrough(SDS_RESULT (*elementProcessor)(pssle pListElement,sdstd_param inParam,sdstd_param outParam),sdstd_param inParam=(sdstd_param)0,sdstd_param outParam=(sdstd_param)0); //traverse the list with specifed processor

virtual SDS_RESULT reverseList(); // reverse the list 
virtual SDS_STRING (*getErrorExpositor())(SDS_RESULT errorNo);

virtual SDS_RESULT setSequence(SDS_SORTMODE sortMode); //Set the list to obey a mode of sequence

virtual SDS_RESULT copyList(const sdstd_single_list * pSource); // copy thd source list to this list


static  SDS_STRING errorDetail(SDS_RESULT errorNo);//get the error detail description according to error number
static  SDS_STRING errDescription[SDS_ERROR_BASE_SINGLE_LIST_HIGH_1-SDS_ERROR_BASE_SINGLE_LIST_LOW_1+1];//error description buffer



protected:

private:
	pssle listHead,listTail,listCurrent; // list head node pointer,list tail node pointer and list current not pointer 
    SDS_RESULT destroyList();
	SDS_RESULT deleteElements(pssle &pElement); //delete all elements after this pElement,including itself, 
    SDS_RESULT deleteElements_1(pssle &pElement); //delete all elements after this pElement,including itself,recursion 
    SDS_RESULT exchangeNeighbor(pssle pPrev); // exchange two neighbor node after the prev node.
	                                          // as the below figure, Node A & Node B got changed

//    -----    -----    -----
//... |   |--->|   |--->|   |  ....
//    -----    -----    -----
//    pPrev    Node A   Node B



};

SDS_STRING sdstd_single_list_impl::errDescription[SDS_ERROR_BASE_SINGLE_LIST_HIGH_1-SDS_ERROR_BASE_SINGLE_LIST_LOW_1+1]={ // define the error detail readable info
"Processing completed successfully!",
"Fatal error!",
"Other error!",
};

SDS_RESULT sdstd_single_list_impl::setSequence(SDS_SORTMODE sortMode)
{

return SDS_OK;
}


 SDS_STRING sdstd_single_list_impl::errorDetail(SDS_RESULT errorNo)
 {
     if(errorNo>SDS_ERROR_BASE_SINGLE_LIST_HIGH_1) //if error number not in the range of this error expositor
	    return NULL;

	 return (errorNo<=SDS_ERROR_BASE?sdstd_single_list::errorDetail(errorNo):errDescription[errorNo-SDS_ERROR_BASE-1]);
 
	 // SDS_ERROR_BASE_SINGLE_LIST_HIGH_1-SDS_ERROR_BASE_SINGLE_LIST_LOW_1+1
	 
	 //
 
 }


 SDS_RESULT sdstd_single_list_impl::copyList(const sdstd_single_list *pSource)
 {

	 if(NULL==pSource)//if source param is NULL
		 return SDS_ERROR_INPUT_PARAM_NULL;

	 if(this==pSource) //if copy it self,just do nothing and return
		 return SDS_OK;

	 const sdstd_single_list_impl *pTmpSource=(sdstd_single_list_impl *) pSource; // the pSource must be a pointer pointing to a sdstd_single_list_impl object
	
	 if(isEmpty()!=SDS_TRUE) // if this list not null, destroy it at first!
		 this->destroyList();
	 
	  pssle pTmp,pTar=NULL,pTarPrev=NULL;

	  pTmpSource->getHead(&pTmp);
      
	  if(NULL==pTmp) //if no element is source list
	  {
	   listHead=listTail=NULL; //set this list null,too!
	   return SDS_OK;
	  }

	  
	  pTar=new sdstd_single_list_element;
      sdstd_single_list::copyElement(pTar,pTmp);      

	  listHead=pTar;// store the list's head
      
	  pTarPrev=pTar; //store the new element as previous element
   
	  pTmp=pTmp->next;//to next element

	  while(1)
	  {
	    if(NULL==pTmp) // if get the end of the source list
		{
		 listTail=pTarPrev; //store the list Tail pointer
         listTail->next=NULL;
	     break;
		}
      
	  pTar=new sdstd_single_list_element; //creat new element
      sdstd_single_list::copyElement(pTar,pTmp);//copy source element to target
      
	  pTarPrev->next=pTar;//link the new element to new list
	  pTarPrev=pTar;//store the new element as previous element
	  pTmp=pTmp->next;
	  }

	return SDS_OK;

 }
 

 SDS_RESULT sdstd_single_list_impl::deleteElements_1(pssle &pElement)
 {  
    SDS_RESULT errorNo=SDS_OK;

	if(NULL!=pElement)
	{
	errorNo=deleteElements_1(pElement->next);
	delete pElement;
	pElement=NULL;
	}

    return errorNo;
}


 SDS_RESULT sdstd_single_list_impl::deleteElements(pssle &pElement)
{  
    pssle pTemp1=pElement,pTemp2=NULL; // defining 2 temp pointer
	while(pTemp1!=NULL)
	{
	pTemp2=pTemp1->next;
    delete pTemp1;
	pTemp1=pTemp2;
    }

    pElement=NULL;
    return SDS_OK;
}


 SDS_RESULT sdstd_single_list_impl::destroyList()
{
	 SDS_RESULT errNo=this->deleteElements(listHead);
	if(SDS_OK==errNo)
	{listTail=NULL;}//initialize the listTail=NULL
	return errNo;	
}


 SDS_RESULT sdstd_single_list_impl::addHead(pssle inData) // add an element before list head
 {
  if(NULL==listHead) //if list is null
  {
  listTail=listHead=inData;
  inData->next=NULL;
  }
  else // if list not null
  {
  inData->next=listHead;
  listHead=inData;
  }

 return SDS_OK;
 }
 
 SDS_RESULT sdstd_single_list_impl::addTail(pssle inData)// add an element after list tail
 {
  if(NULL==listHead) //if list is null
  {
   listTail=listHead=inData;
   inData->next=NULL;
  }
  else // if list not null
  {
  listTail->next=inData;
  listTail=inData;
  inData->next=NULL;
  }
 return SDS_OK;
 }
 
 SDS_RESULT sdstd_single_list_impl::insertElement(pssle pUsher,pssle inData) // add an element after the pUsher
  {
 
	 if(NULL==pUsher)//if add at the begin
		 return addHead(inData);
	 if(NULL==pUsher->next) // if add at tail
         return addTail(inData);

	 inData->next=pUsher->next; // if normal situation
	 pUsher->next=inData;
	 return SDS_OK;
 }
 

 SDS_RESULT sdstd_single_list_impl::getHead(pssle *pElement)const  // get the head element and store it to pElement buffer
 {
	 *pElement=listHead;
	 return SDS_OK;
 }
 SDS_RESULT sdstd_single_list_impl::getTail(pssle *pElement)const  // get the tail element and store it to pElement buffer
{
     *pElement=listTail;
	 return SDS_OK;
}
	 
 SDS_RESULT sdstd_single_list_impl::deleteElement(pssle pUsher,pssle pElement) // deleting the element
 {
	 if(NULL==pElement) // if no element exist in this list
		 return SDS_ERROR_DELETING_NULL_ELEMENT;

 
	 if(NULL==pUsher) // if delete head
	 {
	   if(pElement!=listHead) // if not try to deleting the first head
		   return SDS_ERROR_NOT_DELETE_LIST_HEAD_WHEN_USHER_NULL;

       listHead=pElement->next;
	   if(NULL==pElement->next)//if only one element
	   {
		 listTail=NULL;
	   }
      else // if not only one element, wipe the linked pointer to list
		 pElement->next=NULL;
	 
     return SDS_OK;
	 }
  
	 if(pUsher->next!=pElement) // if pElement not the subsquence of the pUsher
       return SDS_ERROR_WRONG_USHER_SUBSEQUENCE;

     if(NULL==pElement->next) // if delete tail
	 {
   
	  listTail=pUsher;
	  if(NULL==listTail) // if only one element
		 listHead=NULL;
	  else
	     listTail->next=NULL; // if not only element, make the tail element's next pointer pointing to NULL 

      return SDS_OK;
	 }

    pUsher->next=pElement->next;// if normal situation
    pElement->next=NULL;

    return SDS_OK;
 }

 SDS_RESULT sdstd_single_list_impl::traverseInit() //Initialization for list traverse
  {
 listCurrent=listHead;
 return SDS_OK;
 }
 
 SDS_BOOL   sdstd_single_list_impl::hasNext() const   // detecting whether list contains more element
  {
 return NULL!=listCurrent;
 }
 
 
 SDS_RESULT sdstd_single_list_impl::getNext(pssle *pElement)// get the element and store it to pElement buffer
 {
 (*pElement)=listCurrent;
 listCurrent=listCurrent->next;

 return SDS_OK;
 }
 
 SDS_BOOL   sdstd_single_list_impl::isEmpty() const
 {
 
 return listHead==NULL;
 }
 
 SDS_RESULT sdstd_single_list_impl::sortList(SDS_KEYTYPE (*getSortKey)(pssle pListElement),SDS_SORTMODE sortMode)// sorting this list with the specifed mode <key-up or key-down>
 {

   if(SDS_TRUE==this->isEmpty()) //if list is null,no element
     return SDS_OK;
  
   if(NULL==getSortKey)//if the getkey function pointer is null,return null
     return SDS_ERROR_INPUT_PARAM_NULL;
   
   if(listHead==listTail) //if only one element
     return SDS_OK;
   // clock_t theTimeStart=::clock();
   //SDS_RESULT errorNo=SDS_OK;
   SDS_BOOL isSortOk=SDS_TRUE;
   pssle pF=listHead,pFPrev=NULL,pB=listTail,pBPrev=NULL; // front point and back point 
  
  
  //pssle pF=listHead,pFPrev=NULL,pB=pF->next,pBPrev=pF; // front point and back point 
  
  //sdstd_single_list_element eleTemp;


 switch(sortMode)
  {
   case SDS_KEYUP_SORT:
 
   while(pB!=listHead)
   {
     
	 while(1)
	 {
	 
       if(getSortKey(pF)>getSortKey(pF->next))
	   {  
		   isSortOk=SDS_FALSE;
   	       if(pF->next==pB)//get the Pointer pB to right position
		       pB=pF;
		   
		
		   pF=pF->next;  //exchange the position of the two element
		   
		   exchangeNeighbor(pFPrev);
		   	    
	   }

	   if(pF->next==pB)
	   {
	        pBPrev=pF;
            break;
	   }
	
	   pFPrev=pF; 
 	   pF=pF->next; 
 	 }
	
	 if(SDS_TRUE==isSortOk)
		 break;
    
	isSortOk=SDS_TRUE;
    
	pF=listHead;
	pFPrev=NULL;
	pB=pBPrev;
 }

  /*
	  while(1)
	   {
		   if(NULL==pF->next) //get to the list end
			   break;
          // SDS_BOOL isKeyUp=SDS_TRUE;
	       while(1)
		   {
			   if(NULL==pB)
				   break;

			   if(getSortKey(pF)>getSortKey(pB))
			   { 

				//   isKeyUp=SDS_FALSE;
			       

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲人成网站| 国产亚洲精品7777| 国产一区二区三区四区五区入口 | 在线成人av网站| 国产伦精品一区二区三区免费迷| 久久综合999| 91成人在线精品| 国内久久精品视频| 亚洲美女偷拍久久| 日韩欧美国产午夜精品| 成人免费视频视频| 日韩va亚洲va欧美va久久| 亚洲精品一区在线观看| 欧美日韩在线电影| 国产福利精品导航| 另类欧美日韩国产在线| 综合久久久久久| 久久天堂av综合合色蜜桃网| av电影在线观看不卡| 麻豆久久久久久| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 久久se精品一区精品二区| 亚洲欧美在线观看| 欧美岛国在线观看| 日本精品一区二区三区四区的功能| 美女视频黄免费的久久 | 免费观看在线综合色| 亚洲国产视频直播| 依依成人综合视频| 中文字幕亚洲电影| 国产精品福利影院| 国产精品第13页| 日韩一区在线播放| 中文字幕亚洲在| 日韩美女视频19| 亚洲人成精品久久久久久| 成人欧美一区二区三区1314| 国产精品日韩成人| 国产精品乱人伦| 中文字幕日韩一区| 亚洲欧美日韩在线不卡| 亚洲精品自拍动漫在线| 亚洲精品免费在线播放| 一区二区久久久| 亚洲国产精品久久人人爱蜜臀| 亚洲图片一区二区| 日本欧美在线看| 久久99久久99精品免视看婷婷| 精品一区二区三区久久| 狠狠色狠狠色合久久伊人| 国产麻豆精品在线| 99国产精品99久久久久久| 色屁屁一区二区| 欧美另类z0zxhd电影| 欧美一区二区三区四区高清| 亚洲精品在线免费观看视频| 国产亚洲va综合人人澡精品| 最新热久久免费视频| 洋洋成人永久网站入口| 男人的j进女人的j一区| 国产又黄又大久久| 色综合中文字幕| 欧美军同video69gay| 久久亚洲精华国产精华液 | www.亚洲精品| 一本一道波多野结衣一区二区| 欧美浪妇xxxx高跟鞋交| 久久精品亚洲麻豆av一区二区 | 成人免费在线视频观看| 亚洲成人手机在线| 精品一区二区在线视频| 成人性视频网站| 在线视频国内一区二区| 欧美第一区第二区| 亚洲欧洲一区二区三区| 日本不卡不码高清免费观看| 国产精品一二三四| 色哟哟一区二区| 精品国产99国产精品| 自拍偷拍欧美激情| 久久爱www久久做| 在线一区二区三区四区五区| 欧美tickling挠脚心丨vk| 亚洲三级免费电影| 久久国产精品99久久人人澡| 99在线精品一区二区三区| 欧美精品乱码久久久久久按摩| 亚洲国产成人在线| 石原莉奈在线亚洲二区| 成人18视频日本| 欧美一级二级三级蜜桃| 亚洲啪啪综合av一区二区三区| 开心九九激情九九欧美日韩精美视频电影 | 大尺度一区二区| 欧美群妇大交群的观看方式| 中文成人av在线| 日本不卡在线视频| 一本一本大道香蕉久在线精品| 精品噜噜噜噜久久久久久久久试看| 伊人色综合久久天天人手人婷| 美女精品自拍一二三四| 欧美视频一二三区| 中文字幕av一区二区三区| 美女视频黄 久久| 欧美亚州韩日在线看免费版国语版| 久久综合狠狠综合久久综合88| 亚洲成人中文在线| 色综合亚洲欧洲| 国产精品热久久久久夜色精品三区| 另类人妖一区二区av| 欧美日产国产精品| 一区二区三区91| 色综合久久综合网欧美综合网 | 亚洲女同ⅹxx女同tv| 男女激情视频一区| 欧美天天综合网| 国产精品激情偷乱一区二区∴| 麻豆成人免费电影| 欧美一区三区二区| 婷婷成人激情在线网| 91福利社在线观看| 日韩伦理电影网| av亚洲产国偷v产偷v自拍| 欧美国产精品中文字幕| 国产精品一区二区果冻传媒| 欧美sm极限捆绑bd| 黄色日韩三级电影| 久久影院午夜片一区| 成人午夜又粗又硬又大| www国产精品av| 韩国v欧美v亚洲v日本v| 久久综合色鬼综合色| 国产乱码精品一区二区三区av | 精品国产免费人成在线观看| 热久久国产精品| 欧美一级xxx| 久久99精品久久久| 精品国产髙清在线看国产毛片| 久久se精品一区二区| 久久只精品国产| 国产盗摄精品一区二区三区在线 | 日本一区二区免费在线| 国产成人欧美日韩在线电影| 亚洲国产精品99久久久久久久久| 成人午夜免费视频| 亚洲免费观看在线观看| 欧美性色黄大片| 免费在线视频一区| 欧美精品一区二区三区在线播放 | 久久久久综合网| 成人听书哪个软件好| 亚洲欧洲另类国产综合| 欧美综合一区二区| 日韩av一级片| 久久女同精品一区二区| av网站一区二区三区| 亚洲国产欧美一区二区三区丁香婷| 欧美日韩小视频| 久久成人久久鬼色| 亚洲国产精品二十页| 欧美在线观看视频在线| 人人精品人人爱| 国产精品久久免费看| 欧美日韩一区二区在线观看视频| 免费观看在线色综合| 中文在线一区二区| 欧美日韩一级大片网址| 亚洲视频狠狠干| 日韩欧美一级在线播放| 国产成人精品综合在线观看| 一区二区三区四区国产精品| 欧美一区二区三区婷婷月色| 成人黄色综合网站| 视频一区在线播放| 欧美激情一区二区三区全黄| 欧洲一区在线电影| 国产剧情在线观看一区二区| 免费在线观看不卡| 国产精品蜜臀在线观看| 欧美日韩在线播放一区| 国产河南妇女毛片精品久久久| 一区二区在线观看免费 | 亚洲国产视频一区二区| 久久综合色婷婷| 欧美午夜精品久久久久久超碰| 国内精品伊人久久久久av一坑| 亚洲激情六月丁香| 国产三级一区二区三区| 精品视频1区2区| 成人精品国产免费网站| 麻豆精品视频在线观看免费| 亚洲欧洲中文日韩久久av乱码| 日韩欧美中文字幕制服| 日本电影亚洲天堂一区| 国产成人在线观看免费网站| 午夜天堂影视香蕉久久| 国产精品久久免费看| 久久欧美一区二区| 欧美精品久久久久久久多人混战 | 国产综合色视频|