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

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

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

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)


相关推荐

  • Pytest(16)随机执行测试用例pytest-random-order[通俗易懂]

    Pytest(16)随机执行测试用例pytest-random-order[通俗易懂]前言通常我们认为每个测试用例都是相互独立的,因此需要保证测试结果不依赖于测试顺序,以不同的顺序运行测试用例,可以得到相同的结果。pytest默认运行用例的顺序是按模块和用例命名的ASCII编码

  • linux发起iscsi_iscsi自动连接

    linux发起iscsi_iscsi自动连接1、存储介质1)磁盘阵列:磁盘阵列是一种采用RAID技术、冗余技术和在线维护技术制造的一种高性能、高可用的磁盘存储设备。2)IP-SAN存储:SAN(StorageAreaNetwork-存储区域网络):是计算机信息处理技术中的一种架构,它将服务器和远程的计算机存储设备(如磁盘阵列、磁带库)连接起来,使得这些存储设备看起来就像是本地一样。SAN就理解成存储虚拟化,而IP-SAN就是采

  • Exhibitor(zookeeper监控工具)[通俗易懂]

    Exhibitor(zookeeper监控工具)[通俗易懂]具体看github上的文档,很详细https://github.com/soabase/exhibitor/wiki/Running-Exhibitor一、这个是Netflix出品的一个监控工具,但实际上也很难用。。Exhibitor的主要功能监控本机的Zookeeper服务,可以自动重启挂掉的Zookeeper服务;定期备份数据;定期清理Zookeeper日志;提供了一个We…

    2022年10月29日
  • 详解卷积神经网络(CNN)

    详解卷积神经网络(CNN)卷积神经网络(ConvolutionalNeuralNetwork,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。

  • linux

    linux

  • .jar中没有主清单属性[通俗易懂]

    .jar中没有主清单属性[通俗易懂].jar中没有主清单属性问题:xxx.jar中没有主清单属性背景:maven项目,springboot服务   IDEA打包,jar包运行出现上述错误解决方案:pom.xml中添加 <build><plugins><plugin><groupId>org.sp…

发表回复

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

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