链表的初体验

来源:互联网 发布:淘宝u站是什么意思 编辑:程序博客网 时间:2024/04/30 07:13

/********************************************
*由c++primer 5.11链表示例整理
*经由BHQT@DLUT C版朋友帮助
*ilist.h文件
********************************************/
#include <iostream>

using namespace std;
class ilist_item
{
        public:
        ilist_item (int value,ilist_item *item_to_link_to =0);
        int value()
        {
                return _value;
        }
        ilist_item* next()
        {
                return _next;
        }
        void next(ilist_item *link)
        {
                _next = link;
        }
        void value(int new_value)
        {
                _value = new_value;
        }
 public:
        ilist_item *_next;
                int _value;

};
class ilist
{
        public:
  void display( ostream &os = cout);
                //ilist();
                int size();
                void  insert_front(int value);
                void insert_end(int value);
//              void display();
                ilist_item*  find(int value);
                void insert(ilist_item *ptr,int value);
                ilist(): _at_front(0), _at_end(0), _size(0){}

 

        private:
                ilist(const ilist&);
        ilist& operator=(const ilist&);
                ilist_item *_at_front;
                ilist_item *_at_end;
                int _size;
};


 void ilist::display(ostream &os)
{
        os<< "/n(" << _size << ")(";
        ilist_item *ptr = _at_front;
        while (ptr)
        {
                os << ptr->value() << " ";
                ptr = ptr ->next();
        }
        os <<")/n";
}

        inline int ilist::size()
        {
                return _size;
        }

inline ilist_item::ilist_item(int value, ilist_item *item): _value(value)
{
        if (!item)
        {
                _next = 0;
        }else
        {
                _next = item->_next;
                item->_next =this;
        }

}

inline void ilist::insert(ilist_item *ptr,int value)
{
        if (!ptr)
        {
                insert_front(value);
        }else
        {
          //bump_up_size();
                new ilist_item(value,ptr);
        }
}
inline void ilist::insert_front(int value)
{
        ilist_item *ptr = new ilist_item(value);
        if (!_at_front)
        {
                _at_front=_at_end=ptr;
        }else
        {
                ptr->next(_at_front);
                _at_front=ptr;
        }
        //bump_up_size();
}

inline void ilist::insert_end(int value)
{
        if (!_at_end)
        {
                _at_end = _at_front = new ilist_item(value);
        }else
        {
                _at_end = new ilist_item(value, _at_end);
        }
        //bump_up_size();
}
ilist_item* ilist::find(int value)
{
        ilist_item *ptr = _at_front;
        while (ptr)
        {
                if (ptr->value()==value)
                        break;
                ptr=ptr->next();
        }
        return ptr;
}
/**************************************
*由c++primer 5.11链表示例整理
*经由BHQT@DLUT C版朋友帮助
*mylist.cpp文件
**************************************/
#include <iostream>
#include "ilist1.h"
//using namespace std;
int main()
{
        ilist mylist;
        for (int ix=0;ix<10 ;++ix )
        {
                mylist.insert_front(ix);
                mylist.insert_end(ix);
        }
        cout <<"OK:after insert_front() and insert_end()/n";
        mylist.display();
        ilist_item *it = mylist.find( 8 );
        cout << "/n"
        << "Searching for the value 8: found it?"
        <<(it ?"yes! /n" : " no! /n");
        mylist.insert( it, 1024 );
        cout << "/n"
        << "Inserting element 1024 following the value 8 /n";
        mylist.display();
}

原创粉丝点击