数据结构线性链表C++模板
来源:互联网 发布:林俊杰baby知乎 编辑:程序博客网 时间:2024/06/06 04:39
通过链式数据结构来实现线性表的功能
templateclass LinkList { //线性链表节点数据结构 struct LNode { ElemType data; //用于存储节点数据 LNode *next; //用于指向下一个节点的指针 };private: LNode *m_pHead; //定义头结点 LNode *q; //定义普通节点,用来存储 LNode *p; //p为线性链表的指针public: //无参构造函数,构造一个空的线性链表 LinkList() { m_pHead = new LNode; //申请头结点空间 m_pHead->next = NULL; //将头结点下一个指向空,线性链表构造成功 } //有参构造函数,参数为初始线性表的长度,构造一个空的线性表 LinkList(int init_size) { m_pHead = new LNode; //申请头结点空间 m_pHead->next = NULL; //将头结点下一个指向空,线性链表构造成功 p = m_pHead; //p为线性链表的指针,从头结点开始,头结点不存储信息 while (p && init_size--) { q = new LNode; //构造空节点 q->next = p->next; //q的下一个节点为原p节点的下一个节点信息 p->next = q; //插入节点q p = p->next; //指针向后移动 } } //有参构造函数,参数为初始线性表的长度,以及初始化某一个元素的值,构造一个空的线性表 LinkList(int init_size, ElemType init_elem) { m_pHead = new LNode; //申请头结点空间 m_pHead->next = NULL; //将头结点下一个指向空,线性链表构造成功 p = m_pHead; //p为线性链表的指针,从头结点开始,头结点不存储信息 while (p && init_size--) { q = new LNode; //构造空节点 q->data = init_elem; //线性链表中的元素全部初始化为init_elem q->next = p->next; //q的下一个节点为原p节点的下一个节点信息 p->next = q; //插入节点q p = p->next; //指针向后移动 } } //析构函数,用于释放线性链表空间,销毁线性链表 ~LinkList() { while (m_pHead) { //当头结点指向空时,认为此线性链表为空表 p = m_pHead->next; //p为线性链表的指针,从头结点之后开始,头结点不存储信息 delete m_pHead; //释放节点空间 m_pHead = p; //继续释放下一个节点的空间 } } //清空链表数据 void ClearList() { p = m_pHead; //p为线性链表的指针,从头结点开始,头结点不存储信息 while (p) { p->data = NULL; //将线性链表中的数据置为空 p = p->next; //指针向后移动 } } //判断线性链表是否为空 bool ListEmpty() { if (!m_pHead) //当头结点指向空时,认为此线性链表为空表 return true; else return false; } //返回线性链表中第i个数据元素的值 ElemType GetElem(int i) { p = m_pHead; //p为线性链表的指针,从头结点开始,头结点不存储信息 while (p->next && i--) //找到第i个元素 p = p->next; //指针向后移动 return p->data; //返回第i个元素 } //获取线性链表的长度 int LinkLength() { int count = 1; p = m_pHead->next; //p为线性链表的指针,从头结点之后开始,头结点不存储信息 while (p->next) { //找到表尾 p = p->next; //指针向后移动 count++; } return count; } //判断线性链表中第一个与e相等的数据元素的位序,如果不存在返回-1 int LocateElem(ElemType e) { int count = 1; p = m_pHead->next; //p为线性链表的指针,从头结点之后开始,头结点不存储信息 while (p->next) { //找到e元素 if (e == p->data) return count; p = p->next; //指针向后移动 ++count; } if (count == LinkLength()) //若没有找到该元素 return -1; } // 在线性链表中第i个位置之前插入新的数据元素e void ListInsert(int i, ElemType e) { p = m_pHead; //p为线性链表的指针,从头结点开始,头结点不存储信息 while (p->next && i--) //找到第i个元素 p = p->next; //指针向后移动 q = new LNode; //q为新建链表节点 q->data = e; //将e赋值给q的数据域 q->next = p->next; //q的下一个节点为原p节点的下一个节点信息 p->next = q; //在p后面接上q节点 } // 在线性链表中删除第i个元素 void ListDelete(int i) { p = m_pHead; //p为线性链表的指针,从头结点开始,头结点不存储信息 while (i--) //找到第i个元素 p = p->next; //指针向后移动 q = p->next; //q即为要被删除第i个元素 p->next = q->next; //p的下一个节点为原q节点的下一个节点信 delete q; //释放q原本占有的空间 }};
阅读全文
0 0
- 数据结构线性链表C++模板
- 数据结构-线性表 (C++)
- 数据结构线性表c
- C - 数据结构 - 线性表
- Linux C 数据结构---线性表
- 数据结构之线性表(C#)
- Linux C 数据结构---线性表
- 复习(数据结构):线性表 : C
- 《数据结构(C语言版)》- 线性表
- 数据结构-->c构建线性表
- 数据结构--线性表C实现
- 数据结构顺序线性表C++模板
- 数据结构-线性链表
- 线性链表---数据结构
- 数据结构 线性链表
- 数据结构--线性链表
- 数据结构-线性链表
- 单链线性表---数据结构C语言版(2)
- C# 反射
- 为金融数据而生-量亿数据 (待审核)
- Android 中 getApplicationContext()、this、getApplication()之间的区别
- itk中的花式数据切割(五)
- 基于Xcode8.3.2及iOS10.3.2的Appium1.6.5测试环境搭建
- 数据结构线性链表C++模板
- Binary XML file line #10: Error inflating class android.support.design.widget.TabLayout
- c/c++ 函数指针的用法
- #pragma pack(push,1) & #pragma pack(pop)
- First Unique Character in a String
- java MongoDB 字符串日期类型查询和日期类型查询
- iOS中的.pch文件
- iOS中info.plist文件的一些相关配置
- 【已解决】github中git push origin master出错:error: failed to push some refs to