链表的C++实现

链表的C++实现

数组中插入一个元素或者删除一个元素时,必须移动数组中的元素,从而使动态列表的顺序存储低效。链表可以解决这一问题,它由数据和一个指向下一个节点的指针组成。基本的操作有构造、判空、插入、删除和遍历。

  • 构造
    令头结点head=null。

  • 判空
    判断 head==null?

  • 插入
    插入可以分别三种情况:1.列表为空;2.当前元素值比头结点的元素值小,该节点作为头结点;3.在链表中某一元素后面插入

  • 删除
    删除可以分为四种情况:1.链表为空;2.删除头结点;3.删除链表中一个不是头结点的元素;4.遍历到最后一个节点,还没找到,那么就是链表中没有要删除的节点。

  • 遍历
    遍历分两种情况:1.链表为空;2.向后遍历,知道当前节点不是NULL。

程序如下:

#include <iostream>
using namespace std;
template<typename DataType>
class List
{
public:
    List();
    bool empty() const;
    void Insert(DataType & value);
    void Delete(DataType & item);
    void Display()const;
public:
    class node
    {
    public:
        node(){ next = NULL; }
    public:
        DataType data;
        node* next;
    };
private:
    node* head;
};
template<typename DataType>
List<DataType>::List()
{
    head = NULL;
}
template<typename DataType>
bool List<DataType>::empty()const
{
    return (head == NULL);
}
template<typename DataType>
void List<DataType>::Insert(DataType & value)
{
    node* n = new node;
    n->data = value;
    if (empty())
        head = n;
    else
    {
        node* p = head;
        node* pre = NULL;
        if (value<=p->data)
        {
            n->next = p;
            head = n;
        }
        else
        {
            while (p != NULL&&value>p->data)
            {
                pre = p;
                p = p->next;
            }
                n->next = p;
                pre->next = n;
        }
    }
}
template<typename DataType>
void List<DataType>::Delete(DataType & item)
{
    if (empty())
        cout << "List is empty!" << endl;
    else
    {
        if (item==head->data)
        {
            head = head->next;
            delete head;
        }
        else
        {
            node* p = head;
            node* pre = NULL;
            while (p != NULL&&p->data != item)
            {
                pre = p;
                p = p->next;
            }
            if (p != NULL)
            {
                pre->next = p->next;
                delete p;
            }
            else
                cout << "Item does not exist in the List!" << endl;
        }
    }
}
template<typename DataType>
void List<DataType>::Display()const
{
    if (empty())
        cout << "List is empty!" << endl;
    else
    {
        node* p = head;
        while (p!=NULL)
        {
            cout << p->data << " ";
            p = p->next;
        }
    }
}
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值