iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++怎么实现单链表
  • 475
分享到

C++怎么实现单链表

2023-07-02 12:07:20 475人浏览 薄情痞子
摘要

本文小编为大家详细介绍“c++怎么实现单链表”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++怎么实现单链表”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。单链表链表内存空间不一定连续,其扩展性较好。多余的不多

本文小编为大家详细介绍“c++怎么实现单链表”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++怎么实现单链表”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

单链表

链表内存空间不一定连续,其扩展性较好。多余的不多说了。该文主要记录单链表的实现,该单链表含有一个非空的头节点。链表的操作实际上是对其指针域与数据域的操作。

线性表的链式存储又称为单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素。为了建立数据元素之间的线性关系,对每个链表结点,除存放元素自身的信息外,还需要存放一个指向其后继的指针。

单链表中结点类型的描述如下:

typedef struct  Lnode{  // 定义单链表节点类型  ElemType data;    // 数据域  struct LNode* next; // 指针域};LNode, *LinkList;

单链表的基本操作

1.初始化

单链表的初始化操作就是构造一个空表。

具体代码:

// 初始化单链表void InitList(LinkList &L) // 构造一个空的单链表L{  L=new LNode;  // 生成新节点作为头节点,用头指针L指向头节点  L->next=NULL; // 头节点的指针域置空}

2.取值

和顺序表不同,在链表中并没有存储在物理相邻的单元中。所以我们只能从链表的首节点出发,顺着链域next逐个节点向下访问。

具体代码:

// 单链表的取值bool GetElem(LinkList L, int i, ElemType &e){  LinkList p=L->next;int j=1; // 初始化,p指向首元节点,计数器j初值为1  while(p&&j<i) // 顺着链域向后查找,直到p为空或p指向第i个元素  {    p=p->next;  // p指向下一个节点    ++j;  // 计数器j相应加1  }  if(!p||j>i)return false;   // i值不合法  e=p->data;  // 取第i个节点的数据域  return true;}

3.查找

从链表的首元节点出发,依次将节点值和给定值e进行比较,返回查找结果。

具体代码:

//单链表的查找bool LocateElem(LinkList L, LNode*& p, ElemType e){  //在单链表中查找第一个数据为e的结点  p = L->next;//p指向首元结点  while (p && p->data != e)  {    p = p->next;  }  if (p)  {    return true;  }  return false;}

4.插入

// 单链表的插入bool ListInsert(LinkList &L, int i, ElemType e){  LinkList p = L;  LNode* s;  int j = 0;  while (p && j < i - 1)//p指向第i-1个结点  {    p = p->next;    j++;  }  if (!p || i < 1)//i大于表长+1或小于1,插入位置不合法  {    return false;  }  s = new LNode;  s->data = e;  s->next = p->next;  p->next = s;  return true;}

5.删除

//单链表的删除bool ListDelete(LinkList& L, int i, ElemType& e){  //将单链表的第i个结点删除  LinkList p = L;  LNode* q;  int j = 0;  while (p->next && j < i - 1)//p指向第i-1个结点  {    p = p->next;    j++;  }  if (!(p->next) || i < 1)//i大于表长或小于1,删除位置不合法  {    return false;  }  q = p->next;//临时保存被删结点的地址以备释放  p->next = q->next;  e = q->data;//保存被删结点的数据  delete q;//释放被删结点的空间  return true;}

示例代码

直接上代码:

LinkList.h

#pragma oncetypedef struct LINKLIST {void * data;struct LINKLIST *pNext;}LinkList;typedef void(*PrintLinkList)(void *);//无头的链表class LinkNode{public:LinkNode();~LinkNode();void insertLinkList(int pos,void * data);void removeByPosInLinkList(int pos);int getSizeLinkList();int findValueInLinkList(void* value);LinkList* getFirstNodeLinkList();void printLinkList(PrintLinkList print);private:LinkList *m_pHead;int m_size;};

LinkList.cpp

// LinkList.cpp//#include "LinkList.h"#include <iOStream>using namespace std;LinkNode::LinkNode(){m_pHead = new LinkList;m_pHead->data = nullptr;m_pHead->pNext = nullptr;m_size = 0;}LinkNode::~LinkNode(){if (m_pHead != nullptr){while (m_pHead != nullptr){LinkList *pNext = m_pHead->pNext;delete m_pHead;m_pHead = nullptr;m_pHead = pNext;}}}void LinkNode::insertLinkList(int pos, void * data){if (m_pHead == nullptr){return;}if (data == nullptr){return;}//插入位置矫正if (pos < 0 || pos > m_size ){pos = m_size;}LinkList * insertNode = new LinkList;insertNode->data = data;insertNode->pNext = nullptr;//找到前一个位置(pos从0开始)LinkList *pPre = m_pHead;for (int i = 0; i < pos; ++i){pPre = pPre->pNext;}//有头节点的链表insertNode->pNext = pPre->pNext;pPre->pNext = insertNode;m_size++;}void LinkNode::removeByPosInLinkList(int pos){if (m_pHead == nullptr){return;}if (pos < 0 || pos >= m_size){return ;}//找到前一个位置(pos从0开始)LinkList *pPre = m_pHead;for (int i = 0; i < pos; ++i){pPre = pPre->pNext;}LinkList *delNode = pPre->pNext;pPre->pNext = delNode->pNext;delete delNode;delNode = nullptr;m_size--;}int LinkNode::getSizeLinkList(){return m_size;}int LinkNode::findValueInLinkList(void* value){int nPos = -1;if (m_pHead == nullptr){return nPos;}if (value == nullptr){return nPos;}LinkList *pHead = m_pHead;for (int i = 0; i < m_size; ++i){//有空的头节点pHead = pHead->pNext;if (pHead->data == value){nPos = i;break;}}return nPos;}LinkList * LinkNode::getFirstNodeLinkList(){if (m_pHead == nullptr){return nullptr;}return m_pHead->pNext;//有空的头节点}void LinkNode::printLinkList(PrintLinkList print){if (m_pHead == nullptr){return ;}//不能直接移动头节点,需要保留头节点LinkList *pTemp = m_pHead;pTemp = pTemp->pNext;while (pTemp != nullptr){print(pTemp->data);pTemp = pTemp->pNext;}cout << endl;}

mian.cpp

#include <iostream>#include "LinkList.h"using namespace std;typedef struct PERSON {char name[64];int age;int score;}Person;void myPrint(void *data) {Person *p = (Person*)data;cout << "name : " << p->name << " age: " << p->age << " score: " << p->score << endl;}void test() {LinkNode *plinkList = new LinkNode;Person p1 = {"husdh",23,78};Person p2 = { "hudfs",23,98 };Person p3 = { "术后",23,78 };Person p4 = { "喀什",23,67 };plinkList->insertLinkList(0, &p1);plinkList->insertLinkList(1, &p2);plinkList->insertLinkList(2, &p3);plinkList->insertLinkList(3, &p4);plinkList->printLinkList(myPrint);cout <<"链表的节点数: "<< plinkList->getSizeLinkList() << endl;plinkList->removeByPosInLinkList(1);cout << "remove" << endl;plinkList->printLinkList(myPrint);cout << "删除后链表的节点数: " << plinkList->getSizeLinkList() << endl;cout << "p3位置: " << plinkList->findValueInLinkList(&p3) << endl;myPrint(plinkList->getFirstNodeLinkList()->data);delete plinkList;plinkList = nullptr;}int main(){test();return 0;}

以上是单链表实现及测试代码。

开发环境

vs2017控制台输出程序。

运行结果

C++怎么实现单链表

读到这里,这篇“C++怎么实现单链表”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网其他教程频道。

--结束END--

本文标题: C++怎么实现单链表

本文链接: https://www.lsjlt.com/news/341979.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++怎么实现单链表
    本文小编为大家详细介绍“C++怎么实现单链表”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++怎么实现单链表”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。单链表链表内存空间不一定连续,其扩展性较好。多余的不多...
    99+
    2023-07-02
  • C++如何实现单链表
    小编给大家分享一下C++如何实现单链表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!单链表的实现(从入门到熟练)概念和结构概念:链表是一种物理存储结构上非连续、非...
    99+
    2023-06-29
  • C++中怎么实现一个单向链表
    C++中怎么实现一个单向链表,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C++单向链表实现代码:#include < iostream>&...
    99+
    2023-06-17
  • 怎么用rust实现单链表
    这篇文章将为大家详细讲解有关怎么用rust实现单链表,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言今天的目标是用rust实现一个简单的单链表LinkedList,同时为此链表提供从头部插入元素(头插法...
    99+
    2023-06-29
  • python单向链表怎么实现
    这篇文章主要介绍“python单向链表怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python单向链表怎么实现”文章能帮助大家解决问题。单向链表:是将所有的数据作为一个个节点,将所有的节点...
    99+
    2023-06-30
  • C++详解如何实现单链表
    目录单链表单链表的基本操作1.初始化2.取值3.查找4.插入5.删除示例代码开发环境运行结果单链表 链表内存空间不一定连续,其扩展性较好。多余的不多说了。该文主要记录单链表的实现,该...
    99+
    2024-04-02
  • C++和python如何实现单链表
    这篇文章给大家分享的是有关C++和python如何实现单链表的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、链表的基本概念链表是数据元素的线性集合(Linear Collection),物理存储不连续。那么,这...
    99+
    2023-06-29
  • python怎么实现单向链表及单向链表的反转
    这篇文章给大家分享的是有关python怎么实现单向链表及单向链表的反转的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。链表的定义链表中的每个节点会存储相邻节点的位置信息,单链表中的每个节点只存储下一关节点的位置信息...
    99+
    2023-06-14
  • python 实现线性链表(单链表)
    初学python,拿数据结构中的线性链表存储结构练练手,理论比较简单,直接上代码。 #!/usr/bin/python # -*- coding:utf-8 -*- # Author: Hui # Date: 2017-10-13...
    99+
    2023-01-31
    链表 线性 python
  • 怎么用Python实现单向链表
    这篇文章主要介绍“怎么用Python实现单向链表”,在日常操作中,相信很多人在怎么用Python实现单向链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python实现单向链表”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • python实现单链表
    #encoding:utf-8 import sys class Lnode():     def __init__(self,elem,next=None):         self.elem = elem    #节点的值   ...
    99+
    2023-01-31
    链表 python
  • C++怎么实现链表排序
    本篇内容主要讲解“C++怎么实现链表排序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么实现链表排序”吧!链表排序Sort a linked list in O(n ...
    99+
    2023-06-20
  • C++怎么实现双向链表
    这篇“C++怎么实现双向链表”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++怎么实现双向链表”文章吧。前言:前面文章分析...
    99+
    2023-06-29
  • C语言怎么实现线性动态单向链表
    本篇内容主要讲解“C语言怎么实现线性动态单向链表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么实现线性动态单向链表”吧!什么是链表链表是数据结构里面的一种,线性链表是链表的一种,线性链...
    99+
    2023-06-30
  • java怎么实现单链表反转
    要实现单链表的反转,可以使用迭代或递归两种方法。 迭代法: public ListNode reverseList(ListNo...
    99+
    2023-10-26
    java
  • C语言怎么实现单链表的基本功能
    本篇内容主要讲解“C语言怎么实现单链表的基本功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么实现单链表的基本功能”吧!首先简单了解一下链表的概念:要注意的是链表是一个结构体实现的一种...
    99+
    2023-06-21
  • C语言数据结构之单链表怎么实现
    本文小编为大家详细介绍“C语言数据结构之单链表怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言数据结构之单链表怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一.为什么使用链表在学习链表以前,...
    99+
    2023-07-02
  • C语言中单链表如何实现
    这篇文章主要介绍“C语言中单链表如何实现”,在日常操作中,相信很多人在C语言中单链表如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言中单链表如何实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-07-04
  • C++实现LeetCode(141.单链表中的环)
    [LeetCode] 141. Linked List Cycle 单链表中的环 Given a linked list, determine if it has a cycle i...
    99+
    2024-04-02
  • python单向循环链表怎么实现
    单向循环链表将所有的链接在一起,每一个节点分为数据存储区和链接区,数据区存储数据,链接区链接下一个节点item: 存储数据的地方next: 链接下一个节点注意: 单向循环链表是首位链接,即尾部的节点要和头部的节点链接单向链表操作1、链表是否...
    99+
    2023-05-16
    Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作