链表的初体验

C++链表示例代码整理
该博客整理了C++ primer 5.11链表示例代码,包含ilist.h和mylist.cpp文件。定义了ilist_item和ilist类,实现了链表的插入、查找、显示等功能,在main函数中进行了插入元素、查找元素等操作并展示结果。

/********************************************
*由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();
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值