`

C++简单链表实现

阅读更多

以下为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++实例:链表实现图书管理系统

    学习尝试,代码不完美,请多包涵

    用类的方式实现C++链表功能

    总的来说,C++中的链表实现涉及到对数据结构和对象的理解,以及熟练运用指针和动态内存管理。通过这个实践,你可以更好地掌握C++的面向对象编程,并深入理解链表这一重要数据结构。如果有任何问题或遇到运行错误,...

    学生信息管理系统(C++实现,链表实现,还有完整的实验报告)

    定义结构体类型,使用动态链表结构编程实现学生 管理系统如下功能: (1)录入每个学生的基本信息; (2)计算每个学生的平均分; (3)按平均分从高到低输出学生信息; (4)按学生姓名的字典顺序输出学生基本信息; (5)按...

    C++双向链表的实现

    以下是一个简单的双向链表类实现: ```cpp class DoublyLinkedList { private: Node* head; Node* tail; public: DoublyLinkedList() : head(nullptr), tail(nullptr) {} // 插入节点到链表尾部 void append...

    c++用链表实现插入删除,排序

    本实验将详细介绍如何用C++通过链表实现插入、删除和排序操作。 ### 1. 链表基础知识 链表由节点组成,每个节点包含两部分:数据域和指针域。数据域存储实际的数据,而指针域则指向下一个节点。链表的头节点通常...

    C++单向链表的实现

    C++进阶学习——单向链表的实现,相关教程链接如下: http://blog.csdn.net/tennysonsky/article/details/49685199

    C++的双向链表实现

    **C++的双向链表实现** 在C++中,双向链表是一种数据结构,它包含节点,每个节点都有指向其前一个节点和后一个节点的指针。这使得在链表中的导航比单链表更加灵活,因为可以向前或向后移动。双向链表在许多算法和...

    C++链表基于类实现多项式的加法和乘法

    `operator*`方法实现多项式乘法,通常采用Karatsuba算法或Toom-Cook算法等高效策略,但基础版本可以使用简单的乘法规则:对每一个项A[i]在第一个多项式中,遍历第二个多项式的所有项B[j],计算A[i]*B[j],并将结果...

    C++实现的一个简单链表

    本项目“C++实现的一个简单链表”聚焦于使用C++语言来创建和操作单链表。下面我们将深入探讨单链表的概念、C++中的实现方式以及其在实际编程中的应用。 单链表是一种线性数据结构,其中每个元素(称为节点)包含两...

    一元多项式的计算C++链表

    在C++编程中,我们可以使用链表数据结构来有效地实现一元多项式的操作,这是因为链表允许动态地存储和管理元素,非常适合处理具有未知长度的多项式序列。 首先,我们需要创建一个节点结构来表示多项式的每个项。这...

    用链表实现多项式_C++_

    总的来说,用链表实现多项式运算是一种灵活且高效的方法,它可以方便地处理任意大小的多项式,并支持各种算术操作。链表的动态特性使得这种实现方式具有很高的可扩展性,可以适应不同的问题需求。

    C++栈模版(链表实现)

    下面是一个简单的链表实现的C++栈模版示例: ```cpp #include struct Node { int data; Node* next; }; class Stack { private: Node* top; public: Stack() : top(NULL) {} ~Stack(); void push(int ...

    c++链表的实现及链表的合并

    总结一下,C++中的链表实现涉及创建节点、插入、删除和遍历等操作。而链表的合并则需要对两个有序链表进行比较并构造新的有序链表。在实际编程中,理解和掌握这些基本操作对于解决更复杂的问题至关重要。在`MyChain`...

    多项式加法的C++链表实现

    本文将深入探讨如何使用C++通过链表数据结构实现多项式加法。链表是一种非连续、非顺序的存储结构,每个节点包含数据元素以及指向下一个节点的指针。在这种情况下,我们将创建一个链表节点来表示多项式的项,其中...

    c++链表队列的实现

    根据给定文件的信息,我们可以总结出以下关于C++中链表队列实现的相关知识点: ### 一、链表队列的基本概念 链表队列是一种使用链表结构来实现的队列数据结构。队列是一种先进先出(First In First Out, FIFO)的...

    用链表实现的职工管理软件 ( C+ + )

    在本项目中,“用链表实现的职工管理软件 ( C++ )”,我们主要探讨的是如何使用C++编程语言,特别是利用链表数据结构来设计一个简单的职工管理系统。链表是一种非常基础且重要的数据结构,它在内存中并不连续存储...

    c++下链表的简单实现

    这就是一个简单的C++链表实现。通过这个实现,你可以学习到如何定义节点,如何使用指针链接节点,以及如何通过类封装这些操作。链表在实际编程中有着广泛的应用,比如在实现栈、队列、哈希表等数据结构时都会用到。...

    c++双向链表的建立于插入

    一个简单的双向链表节点定义可能如下: ```cpp struct Node { int data; Node* next; Node* prev; }; ``` 在这里,`data`用于存储数据,`next`指针指向后继节点,`prev`指针指向前驱节点。初始化链表时,通常会...

    C++中用链表实现的通讯录

    根据给定的信息,本文将详细解释如何在C++中利用链表实现一个基本的通讯录系统,包括添加、查找和删除联系人等核心功能。 ### 一、项目概述 本项目是一个基于C++语言实现的控制台应用程序,其主要目的是通过链表...

    C++链表的实现(有我在里面很详细的注释哦!)

    此外,我们还经常需要遍历链表以打印或检查其内容,这可以通过一个简单的循环实现: ```cpp void printList(ListNode* head) { ListNode* curr = head; while (curr != NULL) { std::cout &lt;&lt; curr-&gt;data ; curr...

Global site tag (gtag.js) - Google Analytics