class CMyList
{
public:
CMyList(void);
//向链表中加入一个元素
void Add(int);
//从链表中移除一个元素
void Remove(int);
//在链表中查找一个元素
int Find(int);
//打印链表中的所有元素
void PrintList();
//向链表中插入一个元素
void insert(int,int);
~CMyList(void);
private:
//链表结构体
struct Node
{
int iVal;
Node * pNext;
};
Node * m_pFirst;//链首结点指针
int m_iCount;
};
CMyList::CMyList(void)
{
m_pFirst = NULL;
m_iCount = 0;
}
CMyList::~CMyList(void)
{
Node * p;
while (p = m_pFirst)
{
m_pFirst = m_pFirst->pNext;
delete p;
}
}
//每次都在链表头部加入元素
void CMyList::Add(int ia)
{
Node * temp = new Node;
temp->iVal = ia;
temp->pNext = m_pFirst;
m_pFirst = temp;
m_iCount++;
}
//删除链表中的一个元素
void CMyList::Remove(int ia)
{
Node * pDest = 0;//用来定位待删结点
if (m_pFirst->iVal == ia)
{
pDest = m_pFirst;
m_pFirst = m_pFirst->pNext;//待删结点在链首时脱链
}
else
{
for(Node * p = m_pFirst; p->pNext; p = p->pNext)
{
if (p->pNext->iVal == ia)
{
pDest = p->pNext;
p->pNext = pDest->pNext;
break;
}
}
}
if (pDest)
{
delete pDest;
pDest = NULL;
}
else
{
cout << "删除元素值为 :" << ia << " 的结点失败" << endl;
cout << "未找到待删结点" << endl;
}
}
//在链表中查找指点值的元素,返回该元素在链表中的位置
int CMyList::Find(int ia)
{
int pos = 0;
for(Node * p = m_pFirst; p; p = p->pNext)
{
pos++;
if (p->iVal == ia)
{
return pos;
}
}
return -1;
}
//遍历链表中的所有元素,并输出
void CMyList::PrintList()
{
Node * p = m_pFirst;
for(;p != NULL;p = p->pNext)
{
cout << p->iVal << " ";
}
cout << endl;
}
//在链表的pos处插入一个元素
void CMyList::insert(int ia,int pos)
{
assert(pos > 0 && pos <= m_iCount);
Node * p = m_pFirst;
while (pos-1)
{
p = p->pNext;
pos--;
}
Node * temp = p->pNext;
Node * node = new Node;
node->iVal = ia;
node->pNext = temp;
p->pNext = node;
}
C/C++实现单线链表及基本操作
最新推荐文章于 2022-10-26 12:15:39 发布