/*这是我第一次写技术博客,代码是从前几天写的直接粘贴够来的。本人刚开始学数据结构,看过一点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;
}