【数据结构】单链表上的基本运算

【数据结构】单链表上的基本运算【数据结构】单链表上的基本运算

大家好,又见面了,我是你们的朋友全栈君。

1.初始化

<span style="font-family:KaiTi_GB2312;font-size:18px;">//建立一个空的单链表
LinkList InitiateLinkList( )
{
     LinkList  head;              //头指针
     head = malloc(sizeof(node));  //动态构建一个节点,它是头结点
     head ->next = NULL;
     return  head;
}</span>

2.求表长

//求单链表表head的长度
int LentghLinklist ( LinkList head )
{
      Node * p = head;           //p是工作指针,初始时p指向头结点
      int cnt = 0;               //计数器置初值
      while(p->next != NULL)     //判断是否为尾节点
      {
           p = p->next;         //指针移动到下一个节点
           cnt ++; 
      }
      return cnt;
}

3.读表元素

//在单链表head中查找第i个元素节点,若找到,则返回指向该节点的指针,否则返回NULL
Node * GetLinklist(LinkList head,int i)
{
      Node *p;                             //p是工作指针
      p = head ->next;                     //初始时p指向头结点
      int c = 1;  
      while ( (c<i) && (p != NULL) )       //当未到第i结点且未到尾节点时继续后移
      {
             p = p->next;
             c++;
      }
      if ( i == c )   return p;            //找到第i个节点
      else return NULL;                    //i<1 或 i>n ,i值不合法,查找失败
}

4.定位

//求表head中第一个值等于x的结点的序号,若不存在这种结点,返回结果为0
int LocateLinklist( LinkList head , DataType x)
{
      Node * p = head;                     //p是工作指针
      p = p->next;                         //初始时p指向首结点
      int i=0;                             //i代表结点的序号,这里置初值为0
      while (p!= NULL && p->data !=x)      //访问链表
      {
             i++;
             p = p->next;
      }
      if (p!= NULL ) return i+1;
      else return 0;
}


5.插入

//在表head的第i个数据元素结点之前插入一个以x为值的新结点
void InsertLinklist ( LinkList head , DataType x,int i )
{
      Node *p , *q;
      if ( i == 1) q = head;
      else q = GetLinklist (head ,i-1);          //找第i-1个数据元素结点
      if (q == NULL )                            //第i-1个结点不存在
            exit ("找不到插入的位置");
      else
            {
                   p = malloc ( sizeof(Node));
                   p->data = x;                  //生成新结点
                   p->next = q->next;            //新结点链域指向*q的后继结点
                   q->next = p;                  //修改*q的链域
            }
}

6.删除

//删除表head的第i个结点
void DeleteLinklist (LinkList head,int i)
{
      Node *p;
      if(i==q) q=head;
      else q=GetLinklist(head,i-1);          //先找到待删除结点的直接前驱
      if(q!=NULL && q->next != NULL)         //若直接前驱存在且待删除结点存在
      {
             p=q->next;                      //p指向待删除结点
             q->next=p->next;                //移出待删结点
             free(p);                        //释放已移出结点p的空间
      }
      else exit ("找不到要删除的结点");      //结点不存在
}

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/105719.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • VL53L0X+stm32激光测距

    VL53L0X+stm32激光测距文末有补充这段时间很忙,一直没时间看邮件,忽略了一些信息,没有及时给有需要的网友发工程代码。其实你们可以找在底下留言的网友,他们留了邮箱,加他们qq或者发邮件给他们,让他们发给你们,这样可以节省你们得时间。———2019.7.3最近学习stm32单片机,用VL53L0X这个传感器进行开发,花了不少时间和精力,写这个博客一个是为了记录自己的学习过程另外一个是感谢网上各位…

  • Lamp架构_lamp服务器

    Lamp架构_lamp服务器LAMP架构搭建1.LAMP架构简介所谓lamp,其实就是由Linux+Apache+Mysql/MariaDB+Php/Perl/Python的一组动态网站或者服务器的开源软件,除Linux外其它各部件本身都是各自独立的程序,但是因为经常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。LAMP指的是Linux(操作系统)、Apache(HTTP服务器)、MySQL(也指MariaDB,数据库软件)和PHP(有时也是指Perl或Python)的第一个字母,一般用来建

    2022年10月17日
  • STM32CubeMX介绍、下载与安装

    STM32CubeMX介绍、下载与安装推荐分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang本教程今年更新了部分内容:STM32CubeMX系列教程Ⅰ、写在前面相信很多人都知道STM32CubeMX这个工具,也是近年来开发STM32比较流行的一个工具。这个工具从两年…

  • 缺陷报告怎么写_注意缺陷报告单

    缺陷报告怎么写_注意缺陷报告单缺陷报告怎么写意义:开发人员和测试人员沟通的重要工具1、缺陷编号(DefectID)——提交缺陷的顺序2、缺陷标题(summary)——简明扼要的描述缺陷3、缺陷的发现者(Defectby)–4、发现缺陷的日期(Detectedondata)—-当天5、缺陷所属的模块(subject)————测试哪个功能模块的时候发现的,开发者可以由此决定谁修改该bug6、发现缺陷版本(Detectedinrelease)测试的是哪个版本(测试是回归

  • 屠龙之技 作者:长铗

    屠龙之技 作者:长铗一  雨水从宽阔的大理石台阶上淌下来,打湿了年轻人制作考究的山羊皮皮鞋。他的身形颀长瘦削,撑一把漆黑的木柄雨伞,侧脸仰望着灰蒙蒙的天空。年轻人推开图书馆那扇锈涩厚重的大门时,一只鸽子飞了出来。他钝重的步子在高耸狭窄的空间里激荡回响。这是一个由教堂改建而成的街区图书馆,在这个时代,聆听圣音的人已经不多了。  年轻人停住了脚步,目光蓦地垂落到教堂内远远的一角。冬日灰冷的阳光从高窗上的彩色玻璃中透下…

  • ETL开发工具KETTLE使用教程「建议收藏」

    ETL开发工具KETTLE使用教程「建议收藏」Kettle的建立数据库连接、使用kettle进行简单的全量对比插入更新:kettle会自动对比用户设置的对比字段,若目标表不存在该字段,则新插入该条记录。若存在,则更新。Kettle简介:Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳定。Kettle中文名称叫水壶,该项目的主程序员MATT希望把各种数据放到一个…

发表回复

您的电子邮箱地址不会被公开。

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