以下为LinkList.h文件代码
#ifndef LINKLIST_H_INCLUDED
#define LINKLIST_H_INCLUDED
typedef struct LNode
{
int data;
struct LNode *next;
} LNode, *pLinkList;
class LinkList
{
private:
pLinkList pList;
int listLength;
public:
LinkList();
~LinkList();
bool InitList();
bool DestroyList();
bool ClearList();
bool IsEmpty();
int GetLength();
bool GetNode(int position, LNode** node);
int LocateElem(int elem);
bool SetNodeData(int position, int newData);
bool GetNodeData(int position, int &data);
bool InsertNode(int beforeWhich, int data);
/*bool DeleteNode(int position);*/
bool DeleteNode(int data);
};
#endif // LINKLIST_H_INCLUDED
以下为LinkList.cpp文件代码
#include <iostream>
#include "LinkList.h"
LinkList::LinkList()
{
pList = NULL;
listLength = 0;
InitList();
}
LinkList::~LinkList()
{
if (!DestroyList())
{
DestroyList();
}
}
//初始化,分配一个头节点。
bool LinkList::InitList()
{
if (!(pList = new LNode))
{
return false;
}
pList->next = NULL;
return true;
}
//销毁链表。
bool LinkList::DestroyList()
{
if (!ClearList()) {
return false;
}
delete pList;
return true;
}
//判断链表是否为空。若为空,返回true,否则返回false。
bool LinkList::IsEmpty() {
if (pList->next == NULL)
{
return true;
}
return false;
}
//返回链表的中当前节点数。
int LinkList::GetLength()
{
return listLength;
}
//将链表清空,释放当前所有节点。
bool LinkList::ClearList()
{
if (pList == NULL)
{
return false;
}
LNode *pTemp = NULL;
while (pList->next != NULL)
{
pTemp = pList->next;
pList->next = pTemp->next;
delete pTemp;
}
listLength = 0;
return true;
}
//将position指定的节点内的数据设置为newData。
//第一个有效节点的position为1。
bool LinkList::SetNodeData(int position, int newData)
{
LNode *pTemp = NULL;
if (!(GetNode(position, &pTemp)))
{
return false;
}
pTemp->data = newData;
return true;
}
//得到指定位置节点的数据。
//节点索引从1到listLength。
bool LinkList::GetNodeData(int position, int &data)
{
LNode *pTemp = NULL;
if (!(GetNode(position, &pTemp)))
{
return false;
}
data = pTemp->data;
return true;
}
//在链表中插入一个节点。
//插入的位置由beforeWhich指定,新节点插入在beforeWhich之前。
//beforeWhich的取值在1到ListLength+1之间。
bool LinkList::InsertNode(int beforeWhich, int data)
{
LNode *pTemp = NULL;
if (beforeWhich < 1 || beforeWhich > (listLength + 1))
{
return false;
}
if (!(GetNode(beforeWhich - 1, &pTemp)))
{
return false;
}
LNode *newNode = new LNode;
newNode->data = data;
newNode->next = pTemp->next;
pTemp->next = newNode;
listLength++;
return true;
}
//删除一个指定的节点。
//节点位置由position指定。
//positon的值从1到listLength。
//若链表为空或指定的节点不存在则返回false。
/*
bool LinkList::DeleteNode(int position)
{
if (position < 1 || position > listLength)
{
return false;
}
LNode *pTemp = NULL;
if (!(GetNode(position - 1, &pTemp)))
{
return false;
}
LNode *pDel = NULL;
pDel = pTemp->next;
pTemp->next = pDel->next;
delete pDel;
listLength--;
return true;
}*/
//通过指定data删除节点
bool LinkList::DeleteNode(int data)
{
LNode *pTemp = NULL;
pTemp = pList;
while (1)
{
if (pTemp->next->data == data)
{
break;
}
pTemp = pTemp->next;
}
LNode *pDel = NULL;
pDel = pTemp->next;
pTemp->next = pDel->next;
delete pDel;
listLength--;
return true;
}
//得到指定位置节点的指针。
bool LinkList::GetNode(int position, LNode **node)
{
LNode *pTemp = NULL;
int curPos = -1;
pTemp = pList;
while (pTemp != NULL)
{
curPos++;
if (curPos == position)
break;
pTemp = pTemp->next;
}
if (curPos != position)
{
return false;
}
*node = pTemp;
return true;
}
//定位与指定数据相等的数据节点。
//如果在当前链表中已经存在该数据则返回该数据节点的索引号。
//若不存在这样的节点则返回0。
//节点索引从0开始到listLength。
int LinkList::LocateElem(int elem)
{
LNode *pTemp = NULL;
int curIndex = 1;
pTemp = pList->next;
while ((pTemp != NULL) && (pTemp->data != elem))
{
pTemp = pTemp->next;
curIndex++;
}
if (pTemp == NULL)
{
return 0;
}
return curIndex;
}
分享到:
相关推荐
c++ 链表实现 以及一个很简单的学生管理系统实现增删查学生信息作为例子,怎样运用链表。
学习尝试,代码不完美,请多包涵
定义结构体类型,使用动态链表结构编程实现学生 管理系统如下功能: (1)录入每个学生的基本信息; (2)计算每个学生的平均分; (3)按平均分从高到低输出学生信息; (4)按学生姓名的字典顺序输出学生基本信息; (5)按...
用C++实现的顺序链表,简单易懂,适合初学者
C++进阶学习——单向链表的实现,相关教程链接如下: http://blog.csdn.net/tennysonsky/article/details/49685199
C++中用链表实现的通讯录源程序,控制台程序,有简单的添加、查找、删除等功能,编译通过的。
一个简单的c++链表实现,包括节点和链表类的定义,以及插入、显示等简单的功能实现
用链表实现的职工管理软件 ( C+ + )
在C++的一系列可视化开发框架下,我选择用Qt来实现程序的功能,因为Qt相对较为简单,容易上手入门,同时Qt是较为新兴的技术框架,并且跨平台开发,很有前景和实用性。通过几天的学习,理解掌握的Qt的必要知识,包括...
单链表的实现。以前都是用C语言实现的,今天用C++练一练手,做出来了。
约瑟夫环的链表实现(C++) 采用链表方式解决问题,代码简单,书写格式规范,有相应注释以及测试小模块。
//清空链表 bool get(int key,int &value;,INode &r_iNode);//获取值 bool get_Last(int &key;,int &value;,INode &r_iNode);//获取最后一个 bool get_Top(int &key;, int &value;,INode &r_iNode);//获取第一个 ...
本程序采用链表的形式处理学生信息,所以用结构体储存学生的信息,每个函数模块都相互独立,源代码简单易懂,可以方便的删除、修改、添加模块,便于根据各种情况对程序升级,以完成任务。 感谢使用啊!
用模板类实现了一个简单的双向链表domo。
用C++简单实现无头结点的建表,插入,删除操作
采用C++实现的简单链表,可按需要自行修改,编辑请使用Dev C++或Visual Code即可
简单的班级成绩管理系统的链表实现
C++写的实现双链表功能, 简单易懂带有详细注释等等 欢迎下载
c++实现的链表添加,查找过程。一个简单的例子,帮助初学者理解链表概念。
1. 请创建一个数据类型为T的链表类模板List,实现以下成员函数: 1) 默认构造函数List(),将该链表初始化为一个空链表(10分) 2) 拷贝构造函数List(const List<T>& list),根据一个给定的链表构造当前链表(10...