栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++语言实现线性表之链表实例

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++语言实现线性表之链表实例

本文实例讲述了C++语言实现线性表之链表实现方法。分享给大家供大家参考。具体分析如下:

插入、删除结点的代码有点多,但这样提高了代码的可读性,且不增加时间复杂度,不会影响程序性能

#include 
using namespace std;
template
class CList;
template
class Node
{
 friend CList;
private:
 T m_data;
 Node *m_pNext;
};
template
class CList
{
public:
 CList();
 ~CList();
 bool IsEmpty();
 void Append(const T &data);
 void Delete(const int &pos);
 void Print();
 int GetLength();
 T Find(const int &pos);
 void Insert(const int &pos,const T &data);
private:
 Node *m_pHead;
 Node *m_pEnd;
 int m_len;
 void Create();
 void Destroy();
};
//为头结点分配空间
template
void CList::Create()
{
 m_pHead = new Node;
 m_pEnd = new Node;
 m_pHead->m_pNext = NULL;
 m_pEnd->m_pNext = m_pHead->m_pNext;
 m_len = 0;
}
template
CList::CList()
{
 Create();
}
//删除所有结点
template
void CList::Destroy()
{
 Node *pF = m_pHead->m_pNext;
 Node *pT;
 while(pF)
 {
  pT = pF;
  pF = pF->m_pNext;
  delete pT;
 }
}
template
CList::~CList()
{
 Destroy();
}
//判断是否为空
template
bool CList::IsEmpty()
{
 if(!m_pHead->m_pNext)
 {
  return true;
 }
 else
 {
  return false;
 }
}
//从表的最后加入一个元素
template
void CList::Append(const T &data)
{
 Node *pT = new Node;
 pT->m_data = data;
 pT->m_pNext = NULL;
 if(!m_pHead->m_pNext)
 {
  m_pHead->m_pNext = pT;
 }
 else
 {
  (m_pEnd->m_pNext)->m_pNext = pT;
 }
 m_pEnd->m_pNext = pT;
 ++m_len;
}
//删除一个元素
template
void CList::Delete(const int &pos)
{
 if(pos < 0 || pos < m_len)
 {
  cout<<"位置不合法"< *pPre = NULL;//存放前一个结点
 Node *pBehind = NULL;//存放后一个结点
 Node *pT = m_pHead->m_pNext;//目标结点
 int ix = -1;
 while(pT)
 {
  ++ix;
  if(ix == pos - 1 - 1)
  {
   pPre = pT;
  }
  else if(ix == pos - 1)
  {
   pBehind = pT->m_pNext;
   break;
  }
  pT = pT->m_pNext;
 }
 if(!pPre)//如果指针为空则说明pos是指第一个元素
 {
  delete pT;
  m_pHead->m_pNext = pBehind;
  --m_len;
  return;
 }
 if(!pBehind)//如果指针为空则说明pos是指最后一个元素
 {
  m_pEnd = pPre;
  delete pT;
 }
 pPre->m_pNext = pBehind;
 --m_len;
}
//输出所有数据
template
void CList::Print()
{
 Node *pT = m_pHead->m_pNext;
 while(pT)
 {
  cout<m_data<<",";
  pT = pT->m_pNext;
 }
 cout<
int CList::GetLength()
{
 return m_len;
}
//查找数据
template
T CList::Find(const int &pos)
{
 if(pos <= 0)
 {
  cout<<"输入不合法"< m_len)
 {
  cout<<"超出表长"< *pT = m_pHead->m_pNext;
 while(pT)
 {
  ++i;
  if(i == pos)
  {
   return pT->m_data;
  }
  pT = pT->m_pNext;
 }
 return NULL;
}
template
void CList::Insert(const int &pos,const T &data)
{
 if(pos <= 0 || pos >m_len)
 {
  cout<<"输入不合法"< *pT = m_pHead->m_pNext;
 Node *pPre = NULL;
 Node *pBehind = NULL;
 while(pT)
 {
  ++i;
  if(i == pos - 1)
  {
   pPre = pT;
  }
  if(i == pos)
  {
   pBehind = pT->m_pNext;
   break;
  }
  pT = pT->m_pNext;
 }
 Node *pNew = new Node;
 pNew->m_data = data;
 if(!pPre)//如果指针为空则说明pos是指第一个元素
 {
  pNew->m_pNext = m_pHead->m_pNext;
  m_pHead->m_pNext = pNew;
  ++m_len;
  return;
 }
 if(!pBehind)//如果指针为空则说明pos是指最后一个元素
 {
  m_pEnd->m_pNext = pNew;
 }
 pPre->m_pNext = pNew;
 pNew->m_pNext = pT;
 ++m_len;
}

希望本文所述对大家的C++程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/65199.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号