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

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

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

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 ("找不到要删除的结点");      //结点不存在
}

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 时序数据库 mysql_时序数据库 应用场景

    时序数据库 mysql_时序数据库 应用场景influxDB介绍时间序列数据是以时间字段为每行数据的标示,比如股票市场的价格,环境中的温度,主机的CPU使用率等。但是又有什么数据是不包含timestamp的呢?几乎所有的数据都可以打上一个timestamp字段。时间序列数据更重要的一个属性是如何去查询它。在查询的时候,对于时间序列我们总是会带上一个时间范围去过滤数据。同时查询的结果里也总是会包含timestamp字段。InfluxDB是一…

    2022年10月4日
    1
  • Android HandlerThread分析[通俗易懂]

    之前Handler分析的文章有分析过,子线程Thread中是不能直接使用Handler的,需要调用Looper.prepare()方法,因此Android就为我们提供了Handler和Thread结合的方法HandlerThread方法,我们先来看下HandlerThread的源码:publicclassHandlerThreadextendsThread{intmP…

    2022年4月16日
    41
  • mysql 远程连接2003「建议收藏」

    远程环境:阿里云linux,以下可依次进行。知道可以远程连接把大象关进冰箱一共分四步打开ssh一、修改配置1、打开mysql配置文件:vimetc/my.cnf2、找到mysqld下面的bind-address如果你的bind-address=localhost,那么请讲它改为0.0.0.0代表允许任何ip访问二、打开端口1、打开端口命令:iptables-…

    2022年4月17日
    37
  • xshell5连接不上虚拟机_虚拟机的网络连接设置

    xshell5连接不上虚拟机_虚拟机的网络连接设置一:首先解决的关于ping的问题1.在虚拟机中ping百度看能不能先ping通,如果虚拟机连接不上网络的话Xshell肯定是连接不上的,如果有上述情况的请点击二:检查你虚拟机中防火墙是否关闭CentOs6中查看防火墙状态:serviceiptablesstatus关闭防火墙:serviceiptablesstop禁用防火墙:chkconfigiptablesoffCentOs7中查看防火墙状态:systemctlstatusfirewalld.service关闭防火墙:

    2022年9月22日
    3
  • lazarus研究–指针变量「建议收藏」

    lazarus研究–指针变量「建议收藏」指针变量定义:type st20=string[20];var vpi:^integer; //定义一个指向整型的指针变量vpst20:^st20;//定义一个指向自定义类型st20的指针变量 vp:POINTER;//定义一个指向POINTER类型(系统预定义的无类型指针)的指针变量。 v1,v2,v3:integer;指针变量的赋值:v1:=10;v2:=100;v3:=1000;st:st[20]=‘hello’;vp:=nil; //n.

    2025年6月2日
    2
  • Nutch使用方法简介

    Nutch使用方法简介Nutch使用方法简介 目前Nutch采用Sehll的启动方式,如果您使用的是Windows系统,那么首先需要安装Cygwin。本文就以在Windows中为例,介绍Nutch的安装和使用方法。 (1)准备需要的软件列表   Cygwin    (下载地址:http://www.cygwin.com/setup.exe)   Jdk(1.4.2以上版本,

    2025年7月14日
    3

发表回复

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

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