C++中的連結串列類的設計

weixin_34262482發表於2013-05-21
mylist.h   //標頭檔案
struct node
{ int idata_item;
  struct node *pnode;}   //結點的定義
class mylist
{ private:                      //成員變數的說明
      struct node* _at_front;
      struct node* _at_end;     //定義該變數是為了連結串列的連結
      int          _size;
  public:
      struct node* get_front(){return _at_front;}
      struct node* get_end(){return _at_end;}
      int size(void){return _size;}
      void insert_front(int)
      void insert_end(int)
      bool insert(struct node*,int)
      int  remove(int)
      void  remove_front(void)
      void  remove_end(void)
      struct node* find(int)
      void display(void)
      void reverse(void)
      bool equality(mylist&)
      mylist& concat(mylist&)
      mylist():_at_front(0),_at_end(0),_size(0) //建構函式
      ~mylist()
       
}
連結串列的實現如下:
mylist.cpp  //連結串列實現檔名
//insert實現程式碼
bool mylist::insert(struct node* pnode,int a)
{assert(pnode!=0);
 struct node* temp=new struct node;
 if(!temp)
 {temp->idata_item=a;
  temp->pnext=pnode->pnext;
  pnode->pnext=temp;}
 return true;
 else
   cerr<<"non memory allocate"<<endl;
   return false;}
 
//display實現程式碼
void mylist::display(void)
{if(_size==0)
   cout<<"mylist is empty"<<endl;
 else
   { struct node *iter=_at_front;
       for(int  i=1;i<=_size;i++)
       { cout<<iter->idata_item<<" ";
         iter=iter->pnext;}
     }
 }       
 //reverse實現程式碼
void mylist::reverse(void)
  {struct node *temp;
   temp=_at_front;
   _at_front=_at_end;
   _at_end=temp;
   while(
  }       
//remove實現程式碼
int  mylist::remove(int a)
 { struct node *iter1=_at_front;
   struct node *iter2=0;
       for(int  i=1;i<=_size;i++)
       { if(iter1->idata_item!=a)
           iter2=iter1;
           iter1=iter1->pnext;
         else
            iter2=iter1->pnext;
            delete iter1;
            _size--;
            return 1;
        }
   
    return 0;}   
 
//insert_end實現程式碼
void mylist::insert_end(int a)
{ struct node* temp=new struct node;
  temp->idata_item=a;
  if(!_at_end)
      { _at_front=_at_end=temp;
       _size++;      
       }
   else
      {_at_end->pnext=temp;
       _at_end=temp;
       _size++;
      }
 }
 //insert_front實現程式碼
void mylist::insert_front(int a)
{struct node* temp=new struct node;
 temp->idata_item=a;
 if(!_at_front)
   {_at_front=_at_end=temp;
    _size++;
    }
 else
    {temp->pnext=_at_front;
     _at_front=temp;
    _size++;}
}

 

連結串列是資料結構的知識,現在我們用C++的類來實現封裝.
對連結串列類分析如下.
連結串列類的成員變數(private)
struct node *_at_front;
struct node *_at_end;
int   _size;
連結串列中結點,所以定義結點如下:
struct node
{ int idata_item;
  struct node *pnext;}
連結串列所支援的操作:
insert 插入一個結點到指定的結點後;
remove 移去一個結點;
find   查詢一個結點;
reverse 翻轉一個連結串列;
size   得到連結串列中結點的個數;
display 連結串列的輸出;
equality 連結串列相等的判斷;
concat   兩個連結串列連結在一起;
以上是連結串列類的有關操作,另外加上建構函式和解構函式;
連結串列的宣告如下:
 

相關文章