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

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

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

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)
上一篇 2022年4月25日 上午6:20
下一篇 2022年4月25日 上午6:20


相关推荐

  • NPS是什么?「建议收藏」

    NPS是什么?「建议收藏」当谈到客户体验管理时,NPS就是一个绕不开的话题。今天就来聊聊NPS落地应用必须了解的8个关键点:一、NPS是什么二、NPS如何计算三、NPS得分如何评估四、NPS如何帮助企业做增长五、如何提升NPS六、NPS问卷设计七、NPS问卷发放八、NPS问卷分析一、NPS是什么NPS(NetPromoterScore),中文名为净推荐值,是客户对品牌/产品的忠诚度得分。由美国贝恩公司FredReichheld(2003)提出,是最流行的顾客忠诚度分析指标,专注于研究客户口碑如何为企业带来良

    2022年6月10日
    43
  • 谈谈数据库连接池的原理及应用_常用的数据库连接池

    谈谈数据库连接池的原理及应用_常用的数据库连接池这次我们采取技术演进的方式来谈谈数据库连接池的技术出现过程及其原理,以及当下最流行的开源数据库连接池jar包。

    2025年12月15日
    5
  • 细数家庭安防五大乱象 何时能步入正轨

    细数家庭安防五大乱象 何时能步入正轨虽然智能家居行业在我国的成长已逾十个年头了,但是目前市场离成型仍然有一段距离。市场上可谓“乱象”丛生,这些绊脚石严重阻碍了行业的良性发展。市场乱象繁生,智能家居从概念炒作到价格高抬,相关预测显示,若真如电商一样打起价格战,智能家居就要认输了。“智能家居”(SmartHome)最早被提出和应用是在上世纪80年代的欧美和日本,2000年才被引入中国。世纪…

    2022年6月22日
    25
  • 科大讯飞「邂逅」挑战杯:国产算力领航,点燃AI科技星火

    科大讯飞「邂逅」挑战杯:国产算力领航,点燃AI科技星火

    2026年3月14日
    2
  • Redis – 底层数据结构与持久化简述

    Redis – 底层数据结构与持久化简述不啰嗦,我们直接开始!一、redis底层数据结构1.sds结构Redis中并没有直接使用C语言中的字符串,而是定义了一种简单动态字符串(simpledynamicstring)作为Redis的默认字符串实现,简称SDS。在Redis中,C语言的字符串只会用于一些无需对字符串修改的地方,如日志打印等。而Redis默认的字符串实现是SDS,如set命令中的key底层即是一个SDS,而value如果是一个字符串类型,则底层也是SDS,如果value是列表,则列表里的每个元素底层都是SDS。

    2022年5月31日
    36
  • sql server 连接查询_连表查询语句

    sql server 连接查询_连表查询语句SQL的连表查询2017年08月31日15:58:49阅读数:176SQL的连表查询连接查询包括合并、内连接、外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要。只有真正了解它们之间的区别,才能正确使用。1、UnionUNION操作符用于合并两个或多个SELECT语句的结果集。UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派…

    2025年11月15日
    5

发表回复

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

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