单链表头插、尾插、求表长---C语言实现_.头插入法建立单链表,实现求表长,按位序查找返回元素值,按元素值查找返回位序-程序员宅基地

技术标签: 笔记  c语言  数据结构  开发语言  


个人主页:我的主页

小白一枚,欢迎指教

一、按位查找: GetElem(L,i)

  • 获取表L中的第i个位置的元素的值
  • 思想:从单链表中第一个结点出发,顺着指着next逐渐往下搜索,知道找到第i个结点为止,否则返回NULL。
//按位查找,返回第i个元素(带头结点)
LNode* GetElem(LinkList L, int i){
    
   if(i<0)
      return NULL;
  LNode *p; //指针p指向当前扫描到的结点
  int j=0;  //L指向头结点,头结点是第0个结点,没有数据
  p=L;
  while(p!NULL && j<i) {
    
    p=p->next;
    j++''
  }
  return p;
}

二、按值查找 LoocateElem(L,e):

  • 按值查找,找到数据域==e的结点
  • 思想:从单链表第一个结点开始,依次往后比较表中各结点数据域的值,若某结点数据域的值=e,则返回该结点的指针,若没有这样的结点,则返回NULL。
LNode*LocateElem(LinkList L,ElemType e){
    
  LNode *p=L->next; //从第1个结点开始查找数据域为e的结点 
  while(p!=NULL&&p->data!=e)
      p=p->next;
  return p;  //找到后返回该结点指针,否则返回NULL
  
}

三、求表长操作Length(L):

  • 思想:计算单链表中数据结点(不含头结点个数)的个数,从第一个结点开始,顺序依次访问表中的每个结点,要设置一个计数器变量,每访问一个结点计数器就加一,知道访问的空结点为止。
int Length(LinkList L){
    
  int len =0;  //统计表长
  LNode *p=L;
  while (p->next !=NULL){
    
    p=p->next;
    len++;
  }
  return len;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ERAUEKRo-1651385679634)(/Users/wuxin/Library/Containers/com.tencent.qq/Data/Library/Caches/Images/5B6FECF776F244105BCF851E9A1FFB48.jpg)]

四、单链表的建立:尾插法/头插法

  • Q:如果给你很多个数据元素(ElemType),要把它们存到一个单链表里边,怎么办呢?

    step:先初始化一个单链表,每次取一个元素,插入到表尾/表头 (带头结点的情况)

// 尾插法建立单链表
LinkList List_Taillnesert(LinkList &L){
     //正向建立单链表
  int x;    //设ElemType为整型
  L=(LinkList)malloc(sizeof(LNode));  //建立头结点
  LNode *s,*r=L;     //r为尾指针
  scanf("%d",&x);    //输入结点的值
  while(x!=9999){
        //输入9999表示结束
     s=(LNode *)malloc(sizeof(LNode));
    s->data=x;
    r->next=s;
    r=s;             //r指向心的表尾结点
    scanf("%d",&x);
  }
    r->next=NULL;   //尾结点指针置空
  return L;     //返回头指针
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8IReVsm9-1651385679636)(/Users/wuxin/Library/Containers/com.tencent.qq/Data/Library/Caches/Images/1A018C19B5376EDCB152C2D9F1E30878.jpg)]

  • 头插法建立单链表
LinkList List_HeadInsert(LinkList &L){
      //逆向建立单链表
  LNode *s;
  int x;
  L=(LinkList)malloc(sizeof(LNode)); //创建头结点
  L->next=NULL;    //初始为空链表
  scanf("%d",&x);   //输入结点的值
  while(x!=9999){
           //输入9999表示结束
    s=(LNode*)malloc(sizeof(LNode));  //创建新结点
    s->data=x;
    s->next=L->next;
    L->next=s;      //将新结点插入表中,L为头指针
    scanf("%d",&x);
  }
     return L;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c7BCOjf8-1651385679637)(/Users/wuxin/Library/Containers/com.tencent.qq/Data/Library/Caches/Images/6CE33B4AB7EADEE5DCCBB4A584EC16A9.jpg)]

  • (注意重要的应用:单链表的逆置)按照头插法,那么数据的位置应该是这样的情况:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KO5tSbhV-1651385679637)(/Users/wuxin/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1498040013/QQ/Temp.db/AB1F60A4-E340-4142-879F-20EEC377E941.png)]

  • TIPS:如果要求逆置一个单链表,只需要设置一个指针,按顺序扫描数据,将扫描的数据再用头插法插入即可。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_50490968/article/details/124526769

智能推荐

Python 入门的60个基础练习_练习python基础语法-程序员宅基地

文章浏览阅读4.2w次,点赞329次,收藏2.7k次。Python 入门的60个基础练习_练习python基础语法

iOS6和iOS7代码的适配(2)——status bar_ios7 statusbar-程序员宅基地

文章浏览阅读1w次。用Xcode5运行一下应用,第一个看到的就是status bar的变化。在iOS6中,status bar是系统在处理,应用_ios7 statusbar

gdb调试时No symbol "var" defined in current context && No Register_no registers调试显示-程序员宅基地

文章浏览阅读2.1k次。问题描述:,在gdb调试程序输出变量:p var,会提示No symbol "var" in current context.原因:程序编译时开启了优化选项,那么在用GDB调试被优化过的程序时,可能会发生某些变量不能访问,或是取值错误码的情况。这个是很正常的,因为优化程序会删改程序,整理程序的语句顺序,剔除一些无意义的变量等,所以在GDB调试这种程序时,运行时的指令和你所编写指_no registers调试显示

IDGeneratorUtil 主键id生成工具类_idgeneratorutils.generateid()-程序员宅基地

文章浏览阅读3.4k次。import java.util.Random;import org.drools.util.UUIDGenerator;/** * * * 类名称:GenerateIdUtil * 类描述: 主键生成工具类 * @author chenly * 创建时间:Jul 10, 2012 8:10:43 AM * 修改人: * 修改时间:Jul 10, 2012 8..._idgeneratorutils.generateid()

关于汇编 BX 和 BLX 跳转指令_汇编blx-程序员宅基地

文章浏览阅读5k次。BX:跳转到寄存器reg给出的目的地址处,如:BX R2BLX:跳转到寄存区reg给出的目的地址处并将返回地址存储到LR(R14)使用这两个指令时有一点特别需要注意:跳转的目的地址必须是奇数,若不是奇数则在后面加1,如某函数的起始地址是0x80000f00,则要跳转到此函数则应该跳转到0x80000f01处!否则会进入硬件错误中断!..._汇编blx

前端vue,打包整合进后端springboot的resources里面后,运行只要刷新就报404_前端项目放入resource-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏4次。vue打包后,其实就剩index.html和一堆静态资源,页面的加载和替换都是通过刷新index.html种的dom来实现的(应该是这样,可能表述不是很好),所以做个重定向就可以了。(博主是这么解决的,网上还有很多人是各种路径错误,大家可以尝试下自己是哪个原因)import org.springframework.boot.web.server.ConfigurableWebServerFa..._前端项目放入resource

随便推点

添加远程github仓库时报错 Warning: Permanently added the RSA host key for IP address 52.74.223.119_cmd warning: permanently added-程序员宅基地

文章浏览阅读9.7k次。1.问题展示2.解决方案1.任意窗口, 打开git bash2.命令行界面, 输入cd C:3.cat ~/.ssh/id_rsa.pub正常下面应该显示一大串公钥如果没有,显示如下图, 则进行下一步, 创建公钥4.创建公钥, 输入 ssh-keygen5.然后一直下一步, 直到出现6.再次输入cat ~/.ssh/id_rsa.pub下面一大串数字便是公钥,复制这些字符串, 打开github, 点击头像, 打开settings, 打开SSH and GPG Keys_cmd warning: permanently added

SQL*Plus 使用技巧1-程序员宅基地

文章浏览阅读154次。[code="java"]1. SQL/Plus 常用命令 a. help [topic] 查看命令的使用方法,topic表示需要查看的命令名称。 如: help desc; b. host 该命令可以从SQL*Plus环境切换到操作系统环境,以便执行操作系统命名。 c. host [command] 在sql*plus环境中执行操作系统命令,如:host notepad.exe..._sql+plus的使用方法

域控服务器搭建与管理论文,校园网络服务器的配置与管理 毕业论文.doc-程序员宅基地

文章浏览阅读441次。该文档均来自互联网,如果侵犯了您的个人权益,请联系我们将立即删除!**学校毕 业 论 文**学校园网络服务器的配置与管理姓 名: **学 号: **指导老师:系 名:专 业: 计算机网络技术班 级:二0一一年十二月十五日摘 要随着网络技术的不断发展和Internet的日益普及,许多学校都建立了校园网络并投入使用,这无疑对加快信息处理,提高工作效..._服务器配置与应用论文

mysql单实例多库与多实例单库_数据库单实例和多实例-程序员宅基地

文章浏览阅读1k次。一、单实例多库:一个mysql实例,创建多个数据目录。规划:实例路径:/usr/local/mysql数据目录路径:(1)/usr/local/mysql/data(2)/usr/local/mysql/data2步骤:安装mysql。配置my.cnf文件。初始化各个数据库。用mysqld_multi启动。1、安装mysql。平常安装。2、m..._数据库单实例和多实例

MFC解决找不到MFC90.DLL的问题_microsoft v90.debugmfc-程序员宅基地

文章浏览阅读6.3k次。今天装了第三方的MFC软件库Xtreme ToolkitPro v15.0.1,听说搞MFC的人都知道它的强大,我刚学习,所以装了一个,然后想运行一下它自带的例子看看。出现一个“找不到mfc90.dll“的问题,百度一下,记录如下:vs2008已经打过sp1补丁,编译C++程序会提示找不到mfc90.dll文件的错误,但是如果是release版的话就能正常运行csdn看到解决方案,粘贴_microsoft v90.debugmfc

XeLaTeX-中文排版解决方案_latex 中文排版 texlive-程序员宅基地

文章浏览阅读2.1k次。以前使用CJK进行中文的排版,需要自己生成字体库,近日,出现了XeTeX,可以比较好的解决中文字体问题,不需要额外生成LaTeX字体库,直接使用计算机系统里的字体,本文以在Linux下为例说明XeTeX的使用。操作系统: UbuntuTeX:除了texlive包外,还需要安装的包是texlive-xetex。字体:可以使用fc-list查看你自己的字体库,注意字体的完整名称,在XeTe..._latex 中文排版 texlive