建立了一个单链表之后,如果要进行一些如插入、删除等操作该怎么办?所以还须掌握一些单链表的基本算法,来实现这些操作。单链表的基本运算包括:查找、插入和删除。下面我们就一一介绍这三种基本运算的算法,并结合我们建立单链表的例子写出相应的程序。

1、查找

对单链表进行查找的思路为:对单链表的结点依次扫描,检测其数据域是否是我们所要查好的值,若是返回该结点的指针,否则返回NULL。

{post_permalink}链表的c语言实现之单链表的查找运算_c语言

因为在单链表的链域中包含了后继结点的存储地址,所以当我们实现的时候,只要知道该单链表的头指针,即可依次对每个结点的数据域进行检测。

以下是应用查找算法的一个例子:

#include <stdio.h>

#include <malloc.h>

#include <string.h> /*包含一些字符串处理函数的头文件*/

#define N 10

typedef struct node

{

char name[20];

struct node *link;

}stud;

stud * creat(int n) /*建立链表的函数*/

{

stud *p,*h,*s;

int i;

if((h=(stud *)malloc(sizeof(stud)))==NULL)

{

printf("不能分配内存空间!");

exit(0);

}

h->name[0]=’/0′;

h->link=NULL;

p=h;

for(i=0;i<n;i++)

{

if((s= (stud *) malloc(sizeof(stud)))==NULL)

{

printf("不能分配内存空间!");

exit(0);

}

p->link=s;

printf("请输入第%d个人的姓名",i+1);

scanf("%s",s->name);

s->link=NULL;

p=s;

}

return(h);

}

stud * search(stud *h,char *x) /*查找链表的函数,其中h指针是链表的表头指针,x指针是要查找的人的姓名*/

{

stud *p; /*当前指针,指向要与所查找的姓名比较的结点*/

char *y; /*保存结点数据域内姓名的指针*/

p=h->link;

while(p!=NULL)

{

y=p->name;

if(strcmp(y,x)==0) /*把数据域里的姓名与所要查找的姓名比较,若相同则返回0,即条件成立*/

return(p); /*返回与所要查找结点的地址*/

else p=p->link;

}

if(p==NULL)

printf("没有查找到该数据!");

}

main()

{

int number;

char fullname[20];

stud *head,*searchpoint; /*head是表头指针,searchpoint是保存符合条件的结点地址的指针*/

number=N;

head=creat(number);

printf("请输入你要查找的人的姓名:");

scanf("%s",fullname);

searchpoint=search(head,fullname); /*调用查找函数,并把结果赋给searchpoint指针*/

}

欢迎大家阅读《链表的C语言实现之单链表的查找运算_c语言》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权

转载请注明原文链接:链表的C语言实现之单链表的查找运算_c语言

c语言链表查找的代码与题目,链表的C语言实现之单链表的查找运算_c语言相关推荐

  1. 链表分解单双数c语言代码,编写一程序,将带头结点的单链表拆成一个奇数链表和一个偶数链表...

    我写了一个,你参考参考! #include #include typedef  struct  node { int data; struct node  *next; }linknode; type ...

  2. java 链表反转_剑指BAT:如何最优雅着反转单链表?

    前言 以专题的形式更新刷题贴,欢迎跟我一起学习刷题,相信我,你的坚持,绝对会有意想不到的收获.每道题会提供简单的解答,如果你有更优雅的做法,欢迎提供指点,谢谢 [题目描述] 反转单链表.例如链表为: ...

  3. 单链表删除所有值为x的元素_线性表之单链表

    单链表 一种以链接方式存储的线性表,适用于频繁增删操作,存储空间不定的情形. 单链表的一个存储结点包含两个域,数据域和指针域.数据域用于存储线性表的一个数据元素,指针域用于指示下一个结点开始的存储地址 ...

  4. python 单链表节点怎么快速定义_线性表链式存储结构之单链表

    线性表的链式存储结构的特点就是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以在内存中未被占用的任意位置.比起顺序存储结构每个元素只需要存储一个位置就可以了.现在链式存储结构中,除了要存储数 ...

  5. 单链表——判断两个单链表(无头节点)是否相交,如果相交,返回单链表的第一个结点

    本博客主要记录两个解法: 1.求两个单链表的节点个数,消除结点个数不同带来的影响,两个指针一起走,相遇即相交点. 2.数学方式求解. 一.求结点个数,消除结点个数不同带来的影响,俩指针同步走 思路:两 ...

  6. 单链表基本操作的实现——前插法与后插法创建单链表

    一.前插法创建单链表 算法步骤: (1)创建一个只有头结点的空链表. (2)根据创建链表包括的元素n,循环n次以下操作: 生成新结点:-->输入元素值赋给新结点数据域:-->将新结点插入到 ...

  7. 链表练习(一元多项式):一元多项式采用带表头结点的单链表存放,用类C语言设计算法求一元多项式的值。

    注意嗷:这里的一元多项式输入时,指数exp不一定是按照递增顺序输入的,但是最终我们想获得一个指数递增的链表形式,所以在插入新结点时,需要进行判断,把他放在合适的位置. #include<stdi ...

  8. c代码实现 ifft运算_C语言系列之FFT算法实现

    0x10 序言 长文预警,详细介绍FFT算法的编程原理和C实现,并在文章的最后附上了本文的所有源代码. 0x11 速览 1)FFT背后的数学原理 2)码位倒序 3)蝶形运算设计 4)利用复数FFT编写 ...

  9. shell 做加法运算_C语言探索之旅 | 第一部分第七课:运算那点事

    上一课是 C语言探索之旅 | 第一部分第六课:变量的世界(三),显示变量内容 今天,我们一起来学习 C语言(对大多数编程语言也类似)中的运算. 之前的课中,我们已经说过:电脑是一台"笨笨&q ...

最新文章

  1. android image 位移动画_深入理解Android之动画
  2. 机器学习实战 - 读书笔记(04) - 朴素贝叶斯
  3. javaWeb服务详解【客户端调用】(含源代码,测试通过,注释) ——测试
  4. spring学习(30):定义第一个bean
  5. 反向链接推进技巧: 有技巧的“跟风”策略
  6. css标签的三种显示模式
  7. datatable刷新数据_UE4 利用SaveGame和CSV进行Runtime数据更新
  8. 上班快1个月,老板也不签合同,也没交社保,该怎么办?
  9. 为什么要使用git pull --rebase?
  10. AD+邮件服务器搭建方案
  11. 基于 Docker 的几种常用 CentOS7 镜像
  12. sas主板服务器安装系统,自带SAS存储 华硕P6T WS PRO工作站主板
  13. [prolog 基础系列] Prolog 的使用以及 Knowledge Base
  14. java类的使用方法小结_JavaPoet的使用指南小结
  15. 一些常用的MacBook快捷键
  16. c 使用mysql的语句_在 MySQL 数据库中使用C 履行SQL的语句
  17. ResultMap中association和collection的区别
  18. 【循环自相关和循环谱系列6】信号的循环平稳性(循环自相关函数)基本原理及推导
  19. CURL: CURLE_COULDNT_CONNECT问题探究
  20. 2021年中国烧碱市场供需现状、进出口贸易及价格走势分析[图]

热门文章

  1. HarmonyOS之AI能力·通用文字识别技术
  2. 下面关于“栈”的描述,正确的是( )
  3. 中国大学MOOC 计算机组成原理第5章 测试(上)
  4. Linux(三) 运行级别
  5. JAVA基本数据类型、数据类型转换
  6. Django使用Mysql时数据库配置
  7. 【linux网络编程】网络字节序、地址转换
  8. python函数调用位置_Python: 浅谈函数局部变量快在哪
  9. 防火墙(14)——实现路由转发功能(2)
  10. 字符串相加—leetcode415