青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

#ifndef LIST_HPP
#define LIST_HPP

#include 
<iostream>
#include 
<string>

using namespace std;

#define DefaultListSize  1000

template
< typename Elem>
class List
{
    
public:
        
virtual void clear() = 0;                           // 清空表
        virtual bool insert( const Elem& )= 0;              // 從表中當(dāng)前位置插入元素
        virtual bool append( const Elem& )= 0;              // 從表中后面插入元素
        virtual bool remove( Elem& )= 0;                    // 移除該元素,并且用引用返回該元素
        virtual void setStart() = 0;                        // 將表當(dāng)前位置指向第一個(gè)
        virtual void setEnd() = 0;                          // 將表當(dāng)前位置指向最后元素
        virtual void pre() = 0;                            // 將指針移向當(dāng)前位置前一個(gè)
        virtual void next() = 0;                            // 將指針移向當(dāng)前位置的下一個(gè)
        virtual int  rightLength()          const= 0;       // 指針后面數(shù)據(jù)的大小
        virtual int  leftLength()           const= 0;       // 指針前面數(shù)據(jù)的大小
        virtual bool setPos( int pos )= 0;                  // 設(shè)置當(dāng)前指針
        virtual bool getValue( Elem& )      const= 0;       // 獲得當(dāng)前指針?biāo)冈?/span>
        virtual void print()                const= 0;       // 輸出信息

        
virtual bool find( Elem const& data )= 0;           //  能否在表中找到元素 data
        virtual int  length()               const= 0;       //  整個(gè)表的長(zhǎng)度
        virtual bool empty()                const= 0;       //  表是否為空
};

#endif



#ifndef ALIST_HPP
#define ALIST_HPP

#include 
"List.hpp"

template
<typename Elem>
class AList: public List<Elem>
{
private:
    
int   maxSize;
    
int   listSize;
    
int   fence;
    Elem
* listArray;

public:
    AList( 
int size= DefaultListSize );
    
~AList();
    
    
void clear();
    
bool insert( const Elem& );
    
bool append( const Elem& );
    
bool remove( Elem& );
    
void setStart() ;
    
void setEnd() ;
    
void prev() ;
    
void next();
    
int  rightLength()          const;
    
int  leftLength()           const;
    
bool setPos( int pos );
    
bool getValue( Elem& )      const;
    
void print()                const;

    
int  length()               const
    
bool find( Elem const& data );
    
bool empty()                const;

    
int  getMaxSize() const;
    
int  getListSize() const;
    
int  getFence() const;

    AList
<Elem>& operator= ( AList<Elem>& t );
    Elem
& operator[]( int i );
};


template
<typename Type>
AList
<Type>::AList( int size )
{
    maxSize
= size;
    listSize
= fence= 0;

    listArray
= new Type[maxSize];
}


template
<typename Type>
AList
<Type>::~AList()
{
    delete [] listArray;
}


template
<typename Type>
void AList<Type>::clear()
{
    listSize
= fence= 0;
}


template
<typename Type>
bool AList<Type>::insert( Type const& Item )
{
    
if( listSize== maxSize ) return false;

    
forint i= listSize; i> fence; i-- )
        listArray[i]
= listArray[i-1];

    listArray[fence]
= Item;
    listSize
++;

    
return true;
}


template
<typename Type>
bool AList<Type>::append( Type const& Item )
{
    
if( listSize== maxSize ) return false;

    listArray[listSize
++]= Item;
    
return true;
}


template
<typename Type>
bool AList<Type>::remove( Type& Item )
{
    
if( rightLength()== 0 ) return false;

    
forint i= fence; i< listSize- 1++i )
        listArray[i]
= listArray[i+1];

    listSize
--;
    
return true;
}


template
<typename Type>
void AList<Type>::prev()
{
    
if(  fence> 0 ) fence--;
}


template
<typename Type>
void AList<Type>::next()
{
    
if( fence<= listSize ) fence++;
}


template
<typename Type>
int AList<Type>::rightLength() const
{
    
return listSize- fence;
}


template
<typename Type>
int AList<Type>::leftLength() const
{
    
return fence;
}

template
<typename Type>
int AList<Type>::length() const
{
    
return listSize;
}


template
<typename Type>
bool AList<Type>::setPos( int pos ) 
{
    
if( pos< 0 || pos> listSize ) return false;

    fence
= pos;
    
return true;
}

template
<typename Type>
bool AList<Type>::getValue( Type& Item ) const
{
    
if( fence< 0 || fence>= listSize ) return false;

    Item
= listArray[fence];
    
return true;
}

template
<typename Type>
void AList<Type>::setStart()
{
    fence
= 0;
}


template
<typename Type>
void AList<Type>::setEnd()
{
    fence
= listSize;
}


template
<typename Type>
bool AList<Type>::find( Type const& data )
{
    
forint i= 0; i< listSize; ++i )
    
if( listArray[i]== data ) return true;

    
return false;
}


template
<typename Type>
void AList<Type>::print() const
{
    
int t= 0;
    
for( t= 0; t< fence; ++t ) cout << listArray[t] << ' ';
    cout 
<< '|' << ' ';
    
for( t= fence; t< listSize; ++t ) cout << listArray[t] << ' ';
}


template
<typename Type>
bool AList<Type>::empty() const
{
    
return listSize== 0;
}

template
<typename Type>
AList
<Type>& AList<Type>::operator= ( AList<Type>& t )
{
    maxSize
= t.getMaxSize();
    listSize
= t.getListSize();
    fence
= t.getFence();

    listArray
= new Type[maxSize];
    
forint i= 0; i< listSize; ++i )
    listArray[i]
= t[i];
    
    
return *this;
}


template
<typename Type>
Type
& AList<Type>::operator[]( int i )
{
    
return listArray[i];
}


template
<typename Type>
int AList<Type>::getMaxSize() const
{
    
return maxSize;
}


template
<typename Type>
int AList<Type>::getListSize() const
{
    
return listSize;
}


template
<typename Type>
int AList<Type>::getFence() const
{
    
return fence;
}

#endif





#ifndef LLIST_HPP
#define LLIST_HPP

#include 
"list.hpp"
#include 
<iostream>

using namespace std;


/////////////////////////////////////////////////////////
//           結(jié)點(diǎn)類, 使用可利用空間表實(shí)現(xiàn)
/////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////


template
<typename Type>
class CLink
{
    
private:
        
static CLink<Type>* freelist;

    
public:
        Type   element;
        CLink
* next;

    
public:
        
void* operator new   ( size_t );
        
void  operator delete( void*  );

        CLink();
        CLink( Type, CLink
<Type>* );
};

template
<typename Type>
CLink
<Type>* CLink<Type>::freelist= NULL;

template
<typename Type>
CLink
<Type>::CLink()
{}

template
<typename Type>
CLink
<Type>::CLink( Type a, CLink<Type>* b ):
element(a), next(b)
{}

template
<typename Type>
void* CLink<Type>::operator new( size_t )
{
    
if( freelist== NULL ) return ::new CLink<Type>;

    CLink
<Type>* temp= freelist;
    freelist
= freelist->next;

    
return temp;
}

template
<typename Type>
void CLink<Type>::operator delete( void* t )
{
    ((CLink
<Type>*)t)->next= freelist;

    freelist
= ( CLink<Type>* )t;
}


/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////////////
///  鏈表實(shí)現(xiàn)
/////////////////////////////////////////////////////////////////



template
<typename Type>
class LList: public List<Type>
{
    
private:
        CLink
<Type>* head, *tail, *fence;
        
int  leftcnt, rightcnt;

    
public:
        LList( 
int size= DefaultListSize );
        
~LList();

        
void clear();
        
bool insert( const Type& );
        
bool append( const Type& );
        
bool remove( Type& );
        
void setStart() ;
        
void setEnd() ;
        
void pre() ;
        
void next();
        
int  rightLength()          const;
        
int  leftLength()           const;
        
bool setPos( int pos );
        
bool getValue( Type& )      const;
        
void print()                const;

        
int  length()               const
        
bool find( Type const& data );
        
bool empty()                const;

        
void init();
        
void removeall();

        
bool setvalue( int pos, Type t );
        
bool setvalue( Type t );
};

template
<typename Type>
LList
<Type>::LList( int size )
{
    init();
}


template
<typename Type>
void LList<Type>::init()
{
    fence
= tail= head= new CLink<Type>;
    leftcnt
= rightcnt= 0;
}

template
<typename Type>
void LList<Type>::removeall()
{
    
while( head!= NULL )
    {
        fence
= head;
        head
= head->next;
        delete fence;
    }
}

template
<typename Type>
LList
<Type>::~LList()
{
    removeall();
}

template
<typename Type>
void LList<Type>::clear()
{
    removeall();
    init();
}

template
<typename Type>
void LList<Type>::setStart()
{
    fence
= head;
    rightcnt
+= leftcnt;
    leftcnt
= 0;
}

template
<typename Type>
void LList<Type>::setEnd()
{
    fence
= tail;
    leftcnt
+= rightcnt;
    rightcnt
= 0;
}

template
<typename Type>
void LList<Type>::next()
{
    
if( fence!= tail ) fence= fence->next, rightcnt--, leftcnt++;
}

template
<typename Type>
int LList<Type>::leftLength() const
{
    
return leftcnt;
}

template
<typename Type>
int LList<Type>::rightLength() const
{
    
return rightcnt;
}

template
<typename Type>
bool LList<Type>::getValue( Type& it ) const
{
    
if( rightcnt== 0 ) return false;

    it
= fence->next->element;
    
return true;
}

template
<typename Type>
bool LList<Type>::insert( const Type& item )
{
    fence
->next= new CLink<Type>( item, fence->next );

    
if( tail== fence ) tail= fence->next;
    rightcnt
++;

    
return true;
}

template
<typename Type>
bool LList<Type>::append( Type const& Item )
{
    tail
= tail->next= new CLink<Type>( Item, NULL );
    rightcnt
++;

    
return true;
}

template
<typename Type>
bool LList<Type>::remove( Type& it )
{
    
if( fence->next== NULL ) return false;

    it
= fence->next->element;

    CLink
<Type>* ltemp= fence->next;
    fence
->next= ltemp->next;
    
if( tail== ltemp ) tail= fence;

    delete ltemp;
    rightcnt
--;

    
return true;
}

template
<typename Type>
void LList<Type>::pre()
{
    CLink
<Type>* temp= head;

    
if( fence== head ) return;
    
while( temp->next!= fence ) temp= temp->next;
    fence
= temp;

    leftcnt
--, rightcnt++;
}

template
<typename Type>
bool LList<Type>::setPos(  int pos )
{
    
if( pos< 0 || pos> rightcnt+ leftcnt ) return false;

    fence
= head;
    
forint i= 0; i< pos; ++i ) fence= fence->next;

    
return true;
}

template
<typename Type>
bool LList<Type>::setvalue( int pos, Type Item )
{
    
if( pos< 0 || pos> rightcnt+ leftcnt ) return false;

    fence
= head;
    
forint i= 0; i< pos; ++i ) fence= fence->next;

    fence
->element= Item;
}

template
<typename Type>
bool LList<Type>::setvalue( Type Item )
{
    
if( fence= head ) return false;

    fence
->element= Item;
    
return true;
}


template
<typename Type>
int LList<Type>::length() const
{
    
return rightcnt+ leftcnt;
}

template
<typename Type>
bool LList<Type>::empty() const
{
    
return rightcnt+ leftcnt== 0;
}

template
<typename Type>
bool LList<Type>::find( Type const& Item )
{
    CLink
<Type>* temp;

    
for( temp= head; temp; temp= temp->next )
        
if( temp->element== Item ) return true;

    
return false;
}


template
<typename Type>
void LList<Type>::print() const
{
    CLink
<Type>* temp= head;

    cout 
<< "";
    
while( temp!= fence )
    {
        cout 
<< temp->next->element << " ";
        temp
= temp->next;
    }

    cout 
<< "";
    
while( temp->next!= NULL )
    {
        cout 
<< temp->next->element << ' ';
        temp
= temp->next;
    }

    cout 
<< "" << endl;
}


#endif

posted on 2009-03-15 10:47 Darren 閱讀(918) 評(píng)論(2)  編輯 收藏 引用

評(píng)論:
# re: 線性表抽象數(shù)據(jù)結(jié)構(gòu)(c++模板實(shí)現(xiàn)) 2009-03-21 00:46 | reason
你這blog全是代碼啊,很強(qiáng)大  回復(fù)  更多評(píng)論
  
# re: 線性表抽象數(shù)據(jù)結(jié)構(gòu)(c++模板實(shí)現(xiàn)) 2009-03-21 20:44 | Darren
@reason
說白了就是保存代碼用的
呵呵  回復(fù)  更多評(píng)論
  

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美一区二区三区久久 | 亚洲性人人天天夜夜摸| 国产日韩精品一区二区三区在线 | 欧美日韩高清在线一区| 欧美二区不卡| 欧美精品色网| 国产精品v欧美精品v日韩精品| 欧美日韩国产在线观看| 欧美日在线观看| 在线视频欧美日韩| 欧美人牲a欧美精品| 欧美视频在线免费| 国产乱码精品1区2区3区| 国产一区二区三区网站| 在线观看国产精品网站| 亚洲人成在线影院| 亚洲在线观看视频网站| 欧美一区国产一区| 久久久www成人免费精品| 麻豆国产va免费精品高清在线| 美乳少妇欧美精品| 亚洲福利视频免费观看| 免费看黄裸体一级大秀欧美| 亚洲国产天堂久久国产91| 欧美大尺度在线观看| 欧美成人综合一区| 久久天天躁狠狠躁夜夜爽蜜月| 久久大逼视频| 一本色道久久综合亚洲二区三区| 性久久久久久| 亚洲一区二区三区高清| 亚洲国产婷婷综合在线精品| 国产日韩欧美三区| 国产精品久久一卡二卡| 欧美肥婆在线| 美日韩精品视频| 久久精品免费播放| 欧美一级专区| 亚洲图片你懂的| 日韩亚洲在线观看| 亚洲精品午夜| 亚洲乱码国产乱码精品精可以看 | 午夜欧美电影在线观看| 中日韩高清电影网| 亚洲激情欧美激情| 亚洲第一天堂av| 欧美激情按摩| 欧美激情第1页| 亚洲丶国产丶欧美一区二区三区| 嫩草国产精品入口| 欧美大片一区二区三区| 免费成人高清视频| 欧美福利网址| 亚洲国产老妈| 亚洲精品日韩在线| 99热在线精品观看| 亚洲视频一区在线观看| 国产区精品视频| 欧美www视频| 亚洲综合不卡| 在线播放日韩| 国产主播在线一区| 欧美高清视频一区二区| 欧美激情亚洲综合一区| 欧美日韩一二三区| 久久午夜视频| 亚洲最新中文字幕| 亚洲六月丁香色婷婷综合久久| 亚洲精品中文字幕在线| 亚洲精品免费网站| 亚洲欧美国产精品va在线观看| 亚洲欧美日本日韩| 久久综合久久88| 欧美日韩1区2区3区| 国产精品五区| 欧美日韩国产精品一区二区亚洲| 女同性一区二区三区人了人一| 欧美片网站免费| 国产亚洲va综合人人澡精品| 红桃视频国产一区| 亚洲精品日韩精品| 欧美一区高清| 亚洲破处大片| 欧美一区观看| 午夜一区二区三视频在线观看| 亚洲欧洲日本专区| 久久综合色影院| 欧美在线视频一区| 午夜精彩国产免费不卡不顿大片| 亚洲国产精品成人综合| 国内精品视频久久| 国产欧美日韩免费| 韩国欧美一区| 国产一区二区日韩| 国产精品一区在线观看你懂的| 国产精品视频精品视频| 欧美午夜久久| 亚洲国产精品成人久久综合一区| 在线观看日韩www视频免费| 精品99一区二区三区| 亚洲免费一在线| 午夜电影亚洲| 另类图片国产| 亚洲一区二区三区免费观看| 欧美日本亚洲视频| 1000部国产精品成人观看| 午夜精品久久久久久久久| 亚洲精品国产欧美| 噜噜噜在线观看免费视频日韩| 国产精品激情av在线播放| 亚洲精品视频二区| 欧美成人综合一区| 日韩一区二区免费高清| 久久夜色精品一区| 亚洲欧洲日产国码二区| 毛片一区二区| 亚洲高清一区二区三区| 久久久久欧美| 欧美一级专区| 狠狠综合久久| 免费成人黄色av| 久久久999| 韩国成人理伦片免费播放| 午夜精品偷拍| 亚洲午夜性刺激影院| 国产精品久久久久久久久久直播| 亚洲午夜av在线| 在线一区观看| 国产人成精品一区二区三| 亚洲人精品午夜| 亚洲综合色激情五月| 亚洲国产成人porn| 免费一区二区三区| 亚洲精品乱码久久久久久黑人| 欧美激情二区三区| 欧美激情一区二区三区全黄 | 国产精品va在线播放| 一级日韩一区在线观看| 亚洲三级国产| 欧美午夜免费电影| 欧美一区二区视频在线观看| 亚洲一区999| 国产日韩一区二区三区| 久久九九全国免费精品观看| 欧美在线免费观看亚洲| 亚洲国产精品999| 夜夜夜久久久| 国产日韩欧美视频| 欧美护士18xxxxhd| 欧美日韩国产在线播放| 欧美一级网站| 久热re这里精品视频在线6| 国产乱码精品一区二区三区忘忧草| 亚洲日本在线视频观看| 中日韩午夜理伦电影免费| 国产一区二区在线观看免费播放 | 欧美日韩国产在线观看| 久久国产精品久久久| 久久午夜激情| 亚洲欧美一区二区三区极速播放| 小辣椒精品导航| 亚洲精品男同| 亚洲欧美在线视频观看| 亚洲国产另类精品专区| 中文国产成人精品| 亚洲电影在线播放| 一本色道久久综合狠狠躁篇怎么玩 | 亚洲精品字幕| 中日韩视频在线观看| 影音先锋久久资源网| 这里只有精品丝袜| 亚洲人成精品久久久久| 午夜欧美不卡精品aaaaa| 日韩一级免费| 久久免费偷拍视频| 久久国产手机看片| 欧美三级网址| 欧美高清视频一二三区| 国产婷婷精品| aaa亚洲精品一二三区| 亚洲国产欧美国产综合一区| 亚洲欧美影院| 性做久久久久久久免费看| 日韩视频一区二区三区在线播放| 欧美成人综合| 欧美激情2020午夜免费观看| 国产亚洲精品aa| 亚洲女与黑人做爰| 激情综合视频| 久久爱91午夜羞羞| 久久精品国产99精品国产亚洲性色| 欧美日韩一区二区三区| 亚洲三级网站| 一区二区三区国产精华| 欧美二区在线| 亚洲精品久久久蜜桃| 亚洲欧洲日韩女同| 欧美va亚洲va国产综合| 亚洲电影免费观看高清完整版在线 | 国产精品一区二区三区乱码|