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

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

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

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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Derek Wilson:三重缓冲,为什么我们爱它[通俗易懂]

    Derek Wilson:三重缓冲,为什么我们爱它[通俗易懂]什么是双重缓冲,垂直同步和三重缓冲?当电脑在显示器上显示东西时,它按照它的想法画一幅需要显示的图像(我们称之为缓冲区Buffer)并传输给显示器。在过去,只有一个缓冲区并不断的被电脑绘制和发送给显示器。这种做法有一些优势,但也有非常大的缺点。最值得注意的是,当物体在屏幕上进行了更新,他们往往会导致闪烁。计算机在绘制的同时发送内容。所有插图感谢劳拉.威尔逊提供。为了解决同一缓冲区

    2022年5月22日
    69
  • A左右ndroid正在使用Uri监视数据库中的更改

    A左右ndroid正在使用Uri监视数据库中的更改

    2022年1月13日
    45
  • python用pandas读取csv文件_使用pandas读取csv文件的指定列方法

    python用pandas读取csv文件_使用pandas读取csv文件的指定列方法根据教程实现了读取 csv 文件前面的几行数据 一下就想到了是不是可以实现前面几列的数据 经过多番尝试总算试出来了一种方法 之所以想实现读取前面的几列是因为我手头的一个 csv 文件恰好有后面几列没有可用数据 但是却一直存在着 原来的数据如下 GreydeMac mini chapter06gre catdata csv1 name 01 coment 01 2 name 02 c

    2025年9月26日
    4
  • Apache自定义日志格式

    Apache自定义日志格式1.Apache日志参数说明:Apache日志格式字符串的含义%%百分号(Apache2.0.44或更高的版本)%a远端IP地址%A本机IP地址%B除HTTP头以外传送的字节数%b以CLF格式显示的除HTTP头以外传送的字节数,也就是当没有字节传送时显示’-‘而不是0。%{Foobar}C在请求中传送给服务端的cookieFoobar的内容。%D服务器

    2022年5月29日
    41
  • JavaBean详解

    JavaBean详解一、概述JavaBean是一种可重用的Java组件,它可以被Applet、Servlet、SP等Java应用程序调用.也可以可视化地被Java开发工具使用。它包含属性(Properties)、方法(Methods)、事件(Events)等特性。***JavaBean是一种软件组件模型,就跟ActiveX控件一样,它们提供已知的功能,可以轻松重用并集成到应用程序中的java类。***任何可以用J…

    2022年7月17日
    17
  • Mysql增删改查sql语句练习

    Mysql增删改查sql语句练习关于数据库的一些操作:进入mysql命令行:mysql-uroot–p查看所有数据库:showdatabases;创建数据库:createdatabasewgcharsetutf8;删除数据库:dropdatabasewg;选择数据库:usedatabases;查看所有表:showtables;查看创建数据库的语句…

    2022年4月10日
    43

发表回复

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

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