C++实现链表基本操作

C++实现链表基本操作前几天找实习的时候 一个面试官给我留了一个题 做一个链表 demo 要求实现创建 插入 删除等操作 链表是一种常见的数据结构 它是一种物理存储单元上非连续 非顺序的存储结构 数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表由一系列结点 链表中每一个元素称为结点 组成 结点可以在运行时动态生成 每个结点包括两个部分 一个是存储数据元素的数据域 另一个是存储下一个结点地址的指针域 我是用

前几天找实习的时候,一个面试官给我留了一个题,做一个链表demo,要求实现创建、插入、删除等操作。

链表是一种常见的数据结构,它是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

我是用C++代码来写的。首先,定义一个linklist.h文件,该文件定义了链表的结点和链表支持的方法。如下所示:

 

//linklist.h:定义链表结点和方法。 #include 
  
    using namespace std; struct Info { string name; //姓名 int id; //学号 }; //链表定义 struct Node { Info val; Node *next; Node(Info x):val(x),next(NULL) {} }; class LinkList { public: //构造函数 LinkList(); //在链表头部插入结点 void InsertHead(Info val); //插入结点 void Insert(Info val,int pos); //删除结点 void Remove(Info val); //得到链表长度 int Length(); //链表反序 void Reverse(); //查找结点位置 int Find(Info val); //打印链表 void Print(); //析构函数 ~LinkList(); private: Node *head; int length; }; 
  

 

然后,定义一个linklist.cpp文件,是链表方法的实现。如下所示:

//linklist.cpp:链表方法的实现。 #include "stdafx.h" #include 
  
    #include "linklist.h" using namespace std; //构造函数 LinkList::LinkList() { head = NULL; length = 0; } //析构函数 LinkList::~LinkList() { Node *temp; for(int i=0;i 
   
     next; delete temp; } } //得到链表长度 int LinkList::Length() { return length; } //在链表头部插入结点 void LinkList::InsertHead(Info val) { Insert(val,0); } //插入结点 void LinkList::Insert(Info val,int pos) { if(pos<0) { cout<<"pos must be greater than zero"< 
    
      next = temp; head = node; length++; return; } while(temp!=NULL && index 
     
       next; index++; } if(temp == NULL) { cout<<"Insert failed"< 
      
        next = temp->next; temp->next = node; length++; } //删除结点 void LinkList::Remove(Info val) { int pos = Find(val); if(pos == -1) { cout<<"Delete failed"< 
       
         next; length--; return; } int index = 2; Node *temp = head; while(index < pos) temp = temp->next; temp->next = temp->next->next; length--; } //查找结点位置 int LinkList::Find(Info val) { Node *temp = head; int index = 1; while(temp!=NULL) { if(temp->val.name == val.name && temp->val.id == val.id) return index; temp = temp->next; index ++; } return -1; //不存在返回-1 } //链表反序 void LinkList::Reverse() { if(head==NULL) return; Node *curNode=head,*nextNode=head->next,*temp; while(nextNode!=NULL) { temp=nextNode->next; nextNode->next=curNode; curNode=nextNode; nextNode=temp; } head->next=NULL; head=curNode; } //打印链表 void LinkList::Print() { if(head == NULL) { cout<<"LinkList is empty"< 
        
          val.name<<","< 
         
           val.id< 
          
            next; } cout< 
            
           
          
         
        
       
      
     
    
  

最后,定义一个main.cpp,用来测试链表功能,如下所示:

// main.cpp : 测试链表功能。 #include "stdafx.h" #include 
  
    #include 
   
     #include "linklist.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { LinkList head; Info val1,val2,val3,val4; val1.id =1,val1.name="Kevin",val2.id=2,val2.name="Cathy",val3.id=3,val3.name="Lucy",val4.id=4,val4.name="Gravin"; //测试插入功能 cout<<"Insert test:"< 
     
    
  

测试结果如下图:

C++实现链表基本操作

 






版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209781.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午8:26
下一篇 2026年3月19日 上午8:26


相关推荐

  • tomcat日志设置与详解

    tomcat日志设置与详解1&nbsp;&nbsp;&nbsp;Tomcat日志概述Tomcat日志信息分为两类:一是运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息。二是访问日志信息,它记录的访问的时间,IP,访问的资料等相关信息。2&nbsp;&nbsp;&nbsp;Tomcat日志配置2.1&nb…

    2022年6月20日
    118
  • 扣子空间网页版入口

    扣子空间网页版入口

    2026年3月12日
    2
  • Ubuntu 12.04下解决Tomcat自启动问题

    当我们安装好Tomcat使用后发现,每次启动都需要在终端中手动键入sudo/var/tomcat/bin/startup.sh,那么我们怎么解决这个问题呢http://hovertree.com/

    2021年12月24日
    50
  • 类的友元函数

    类的友元函数

    2021年8月25日
    62
  • Java线程锁(一)

    Java线程锁(一)在 Linux 系统下 启动一个新的进程必须要给它分配独立的地址空间 建立众多的数据表来维护它的代码段 堆栈段和数据段 这是一种昂贵的多任务工作方式 而在进程中同时运行多个线程 多个线程彼此之间使用相同的地址空间 共享大部分数据 启动一个线程所花费的空间远远小于一个进程所花费的空间 而且线程之间彼此切换所需要的时间远远小于进程之间切换所需要的时间多线程并发面临的挑战 由于多个线程是共同占用所属进程的资源和地址空间的 如果多个线程要同时访问某个资源怎么办 其实在 Java 并发编程中 经常遇到多个线程访问同一个共享

    2026年3月18日
    2
  • Python小白的数学建模课-04.整数规划「建议收藏」

    Python小白的数学建模课-04.整数规划「建议收藏」整数规划与线性规划的差别只是变量的整数约束。问题区别一点点,难度相差千万里。选择简单通用的编程方案,让求解器去处理吧。『Python小白的数学建模课@Youcans』带你从数模小白成为国赛达人。1.从线性规划到整数规划1.1为什么会有整数规划?线性规划问题的最优解可能是分数或小数。整数规划是指变量的取值只能是整数的规划。这在实际问题中很常见,例如车间人数、设备台数、行驶次数,这些变量显然必须取整数解。整数规划并不一定是线性规划问题的变量取整限制,对于二次规划、非线性规划问题也有.

    2022年7月12日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号