• C++中的链表类的设计


    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   两个链表连结在一起;
    以上是链表类的有关操作,另外加上构造函数和析构函数;
    链表的声明如下:
     
  • 相关阅读:
    CSS 控制table 滑动及调整列宽等问题总结
    Java读取properties文件
    水晶报表打印
    C# 运行时序列化
    C#attribute-----------初级
    c# 单元测试工程如何取得当前项目路径
    C# 字段、属性、成员变量
    水晶报表主子报表分页问题
    从0打卡leetcode之day 3 -- 最大子序列和
    从零打卡leetcode之day 2---两数相加
  • 原文地址:https://www.cnblogs.com/renyuan/p/3091493.html
Copyright © 2020-2023  润新知