用c++实现简单的单向链表

/*这是我第一次写技术博客,代码是从前几天写的直接粘贴够来的。本人刚开始学数据结构,看过一点c++,所以想用类来实现链表

*/

/*
    Date: 19/09/11 23:37
  Description: 实现单向链表基本的功能

  包括:创建,插入,得到元素的值,删除,销毁
*/

#include<iostream>

//节点
typedef struct Node{
    int num;
    struct Node*pNext;
}Node;

//用类管理和实现链表
class MyList{
    public:
    Node node;                                                                  //节点
    Node*pHead;                                                               //头指针
    int Len;                                                                         //保存链表长度
    MyList();                                                                       //构造器,初始化链表
    ~MyList();                                                                    //析构器,销毁链表
    bool InsertElem(int i,int e);                                               //在链表的第i个位置插入元素e                                        
    int GetElem(int i);                                                     //返回链表的第i个元素
    bool DeleElem(int i,int &e);                                            //删除链表中的第i个元素 ,并由e返回
    int ListLen();                                                              //返回链表的长度
    bool IsEmpty();                                                             //判断是否为空链表
    void Destory();                                //销毁链表,释放申请的所有储存空间,和前面的析构器一样,可显示调用
};

 

//函数实现
MyList::MyList()
{
    pHead=new Node;
    pHead->pNext=NULL;
    Len=0;
}
MyList::~MyList()
{Node*p=pHead;
    Node*q=p;
    while(p){p=p->pNext;
    delete q;
    q=p;
   } 
}  
   
void MyList::Destory()
{
    Node*p=pHead;
    Node*q=p;
    while(p){p=p->pNext;
    delete q;
    q=p;
   }   
       
}    
bool MyList::InsertElem(int i,int e)
{
    Node*p=pHead;
    int j=0;
    while(p&&j<i-1){p=p->pNext;++j;}
    if(!p||j>i-1)return false;
    Node*pTem=new Node;
    pTem->num=e;
    pTem->pNext=p->pNext;
    p->pNext=pTem;
    Len++;
    return true;
}    
   
int MyList::GetElem(int i)
{
    int j=1;
    Node*p=pHead->pNext;
    while(p&&j<i){
        p=p->pNext;
        ++j;
    }
    if(!p||j>i)return -1;
    return p->num;

bool MyList::DeleElem(int i,int &e)
{
    int j=0;
    Node*p=pHead;
    while(p->pNext&&j<i-1){
        p=p->pNext;
        ++j;
        }
        if((p->pNext==NULL)||j>i-1)return -1;

        Node*q=p->pNext;
        p->pNext=q->pNext;
        e=q->num;
        delete q;
        Len--;
        return 1;
    }   
int MyList::ListLen()
{
    return Len;
}
bool MyList::IsEmpty()
{
    return Len==0;
}        
    

第一次写这种博客也不知道怎么写才让人看得懂。幸好这只是篇写给自己玩的,一般人都会链表。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值