当前位置: 首页 > news >正文

C/C++链表的常用操作实现

C/C++链表的常用操作实现

  链表的存储结构为一个节点连着下一个节点(node),节点包括两个域,数据域和指针域。

struct Node
{int m_nElement;				// 数据域Node* m_pNext;				// 指针域Node(int nElement = 0, Node* pNext = nullptr):m_nElement(nElement), m_pNext(pNext){// ...}
};

链表操作

  • 1.初始化链表
  • 2.判断链表是否为空
  • 3.按序号查找
  • 4.查找元素与e相等的节点
  • 5.定位操作,确定节点在单链表中的序号
  • 6.在第 index 个位置插入元素
  • 7.删除第 index 个节点
  • 8.求链表长度
  • 9.清空链表

链表实现代码

// 链表节点
struct Node
{int m_nElement;Node* m_pNext;Node(int nElement = 0, Node* pNext = nullptr):m_nElement(nElement), m_pNext(pNext){// ...}
};// 链表类
class LinkedList
{
public:LinkedList();~LinkedList();public:void Initialize();                              // 初始化链表bool IsEmpty() const;                           // 判断链表是否为空Node* GetNodeByIndex(int nIndex);               // 按序号查找Node* GetNodeByElement(int nElement);           // 查找元素与e相等的节点int GetIndexByElement(int nElement);            // 定位操作,确定节点在单链表中的序号bool Insert(int nIndex, int nElement);          // 在第 index 个位置插入元素bool Delete(int nIndex, int& nElement);         // 删除第 index 个节点int Length();                                   // 求链表长度void Release();                                 // 清空链表void Print();                                   // 打印链表 (在Qt环境下使用 qDebug() 实现)private:Node* m_pHead;
};// 链表类成员函数实现
LinkedList::LinkedList() : m_pHead(nullptr)
{// ...
}LinkedList::~LinkedList()
{Release();
}void LinkedList::Initialize()
{if (nullptr == m_pHead)m_pHead = new Node();
}bool LinkedList::IsEmpty() const
{if (nullptr == m_pHead)return true;return (nullptr == m_pHead->m_pNext);
}Node* LinkedList::GetNodeByIndex(int nIndex)
{Node* pCurNode = m_pHead;for (int i = 0; i > nIndex; ++i){if (nullptr == pCurNode)return nullptr;pCurNode = pCurNode->m_pNext;}return pCurNode;
}Node* LinkedList::GetNodeByElement(int nElement)
{if (nullptr == m_pHead)return nullptr;Node* pCurNode = m_pHead;while (nullptr != pCurNode->m_pNext){pCurNode = pCurNode->m_pNext;if (nElement == pCurNode->m_nElement)return pCurNode;}return nullptr;
}int LinkedList::GetIndexByElement(int nElement)
{if (nullptr == m_pHead)return -1;Node* pCurNode = m_pHead;int nIndex = -1;while (nullptr != pCurNode->m_pNext){pCurNode = pCurNode->m_pNext;++nIndex;if (nElement == pCurNode->m_nElement)return nIndex;}return -1;
}bool LinkedList::Insert(int nIndex, int nElement)
{if (nullptr == m_pHead)Initialize();if (nIndex > Length())return false;Node* pPreNode = nullptr;Node* pCurNode = m_pHead;for (int i = 0; i <= nIndex; ++i){pPreNode = pCurNode;pCurNode = pCurNode->m_pNext;}pPreNode->m_pNext = new Node(nElement, pCurNode);return true;
}bool LinkedList::Delete(int nIndex, int &nElement)
{if (nullptr == m_pHead)return false;if (nIndex >= Length())return false;Node* pPreNode = nullptr;Node* pCurNode = m_pHead;for (int i = 0; i <= nIndex; ++i){pPreNode = pCurNode;pCurNode = pCurNode->m_pNext;}nElement = pCurNode->m_nElement;pPreNode->m_pNext = pCurNode->m_pNext;delete  pCurNode;return true;
}int LinkedList::Length()
{if (nullptr == m_pHead)return 0;Node* pCurNode = m_pHead;int nLength = 0;while (nullptr != pCurNode->m_pNext){pCurNode = pCurNode->m_pNext;++nLength;}return nLength;
}void LinkedList::Release()
{Node* pCurNode = m_pHead;while (pCurNode){Node* pNode = pCurNode;pCurNode = pCurNode->m_pNext;delete pNode;}m_pHead = nullptr;
}void LinkedList::Print()
{if (nullptr == m_pHead){qDebug() << "Empty Linked List!";return;}Node* pCurNode = m_pHead->m_pNext;QString strInfo("[");while (nullptr != pCurNode){strInfo.append(QString::number(pCurNode->m_nElement) + ((nullptr != pCurNode->m_pNext) ? QString(", ") : QString("]")));pCurNode = pCurNode->m_pNext;}qDebug() << strInfo;
}
http://www.xdnf.cn/news/197641.html

相关文章:

  • three.js后处理原理及源码分析
  • HTML5好看的水果蔬菜在线商城网站源码系列模板7
  • 文档在线协同工具ONLYOFFICE教程:如何使用宏突出显示具有特定提示文本的空文本字段
  • window 图形显示驱动-在 WDDM 1.2 中提供无缝状态转换(下)
  • 系统架构师2025年论文《论面向对象的软件设计——UML 在面向对象软件架构中的应用》
  • leetcode 876. 链表的中间结点
  • Python 实现的运筹优化系统数学建模详解(动态规划模型)
  • 第二阶段:基础加强阶段总体介绍
  • 网络安全怎么入门?快速了解
  • 基于大模型的公安预审办案笔录分析的挑战与应对策略-3
  • 2025汽车制造企业数字化转型路径参考
  • TypeScript之基础知识
  • vue报错:Loading chunk * failed,vue-router懒加载出错问题。
  • C++复习补充 类型转换和RTTI
  • 人工智能与机器学习:Python从零实现K-Means 算法
  • RAG工程-基于LangChain 实现 Advanced RAG(预检索优化)
  • 驱动开发硬核特训 │ Regulator 子系统全解
  • 企业架构之旅(2):解锁TOGAF ADM
  • 什么是 DDoS 攻击?高防 IP 如何有效防护?2025全面解析与方案推荐
  • 风力发电领域canopen转Profinet网关的应用
  • echarts X轴是日期,Y轴是文字
  • 【mysql】python+agent调用
  • 算法相关概念
  • Python创意爱心代码分享指南
  • 信号完整性简介第一篇
  • C++中的格式化字符串
  • TMI投稿指南(二):投稿文章注意事项
  • JAVA设计模式——(八)单例模式
  • 详解UnityWebRequest类
  • 02_使用 AES 算法实现文件加密上传至阿里云、解密下载