对动态链表的创建不太熟悉的同学请看https://blog.csdn.net/tongjingqi_/article/details/105831323
想了解单链表的增删改的同学请看
https://blog.csdn.net/tongjingqi_/article/details/105873529
本篇讲用选择法进行排序和顺序查找
利用选择法进行排序,每次交换数据,每一个位置(地址)的连接方式不改变,和数组排序同理,区别只是遍历方式不同,具体思想是:从先第一个位置开始遍历,只要后面的数比第一个数小就交换,所以第一次遍历结束后第一个位置存放最小数据,同理再从第二个位置继续遍历,最后第二个位置得到第二小的数据,以此类推,实现升序排列,降序同理。
顺序查找就是从前往后依次遍历链表,符合链表的结构,也容易理解

第一次输出排序结果,第二次输出查找‘3’的结果
代码如下

#include <stdio.h>
#include <stdlib.h>
struct node
{int data;struct node*next;
};
struct node* create_list(int n)//建立链表
{int x;struct node *p,*q,*head=NULL;for(int i=0;i<n;i++){p=(struct node*)malloc(sizeof(struct node));scanf("%d",&x);p->data=x;if(head==NULL){head=p;}else{q->next=p;}q=p;}p->next=NULL;return head;
};
void print_list(struct node* head)//输出链表
{struct node* p=(struct node*)malloc(sizeof(struct node));for(p=head;p!=NULL;p=p->next){printf("%d ",p->data);}printf("\n");
}
void sort_list(struct node* head)//链表选择排序
{struct node *p=(struct node*)malloc(sizeof(struct node));struct node *q=(struct node*)malloc(sizeof(struct node));int t;for(p=head;p!=NULL;p=p->next)//选定的位置,从第一个位置开始{for(q=p->next;q!=NULL;q=q->next)//每次遍历一遍链表,只要比选定位置的数据小就交换{if(q->data<p->data){t=q->data;q->data=p->data;p->data=t;}}}
}
struct node* find(struct node* head,int x)//顺序查找
{struct node *p=(struct node *)malloc(sizeof(struct node));for(p=head;p!=NULL;p=p->next)//从前往后遍历链表查找{if(x==p->data)return p;}return p;
}
int main()
{int n;struct node*head,*p;scanf("%d",&n);head=create_list(n);print_list(head);sort_list(head);print_list(head);p=find(head,3);if(p!=NULL)printf("%d",p->data);return 0;
}

C语言单链表的排序、查找(通俗易懂)相关推荐

  1. c语言单链表递增排序,单链表 基本操作(元素递增排序)

    题目描述: 有一个带头节点的单链表L(至少有一个数据节点),设计一个算法使其元素递增有序排列. 解题思路: 由于单链表L中有一个以上的数据节点,首先构造一个只含有头结点和首节点的有序单链表(只含有一个 ...

  2. c语言单链表的按序号查找,以下为单链表按序号查找的运算,分析算法,请在______处填上正确的语句。 pointer find_lklist(1kl...

    以下为单链表按序号查找的运算,分析算法,请在______处填上正确的语句. pointer find_lklist(1kl 更多相关问题 [单选题]Struts2框架最先加载的配置文件是: A. de ...

  3. 字符串的冒泡排序c语言,c语言单链表冒泡排序_c语言字符串排序冒泡法_c语言链表排序...

    1. #include 2. 3. struct Node; 4. 5. typedef struct Node *PtrToNode; 6. typedef PtrToNode List; 7. t ...

  4. C语言单链表基本操作总结

    C语言单链表基本操作     本文是参考他人实现的C语言单链表,对多篇博文整理的结果,仅作为学习笔记.文末有参考出处. 1.单链表定义 链表是通过一组任意的存储单元来存储线性表中的数据元素,这些存储单 ...

  5. C语言 单链表通讯录基础版实现,保证看完都直呼easy

    C语言 单链表实现通讯录基础版,保证看完都大呼简单! --------------------------------- 首先在写通讯录之前,必须明确我们的需求: 因为是基础版,我在这里暂时只实现以下 ...

  6. C语言一趟冒泡交换最小值,C语言单链表冒泡排序为啥以下代码实现不了?

    struct node *sort(struct node *head)/*排序*/ { struct node *p,*q; struct node *temp; for(p=head;p!=NUL ...

  7. C语言单链表,能直接运行的代码!

    C语言单链表,实现增删改查 不废话 直接上代码,COPY就能运行 #include <stdio.h> #include <stdlib.h> /** *定义数据元素 */ t ...

  8. C++语言单链表实现荷兰旗问题

    C++语言单链表实现荷兰旗问题 一.设备及软件 VC6.0 二.语言 C++ 三.涉及的数据结构与算法 单链表.尾插法 四.问题描述 荷兰旗问题亦称三色旗问题. 这里荷兰旗用0,1,2分别表示三种颜色 ...

  9. C语言单链表初学容易掉的坑

    C语言单链表初学容易掉的坑 结点的指针没有分配内存. 一个链表最基本的操作有建立.增加.删除.查找,几乎所有操作都离不开中间结点p.比如,建立时先检查是否空链表,若是,则令head指向结点p所指向的值 ...

最新文章

  1. SJCL:斯坦福大学JS加密库
  2. 解决在C#(.net)按字节数截取字符串最后出现乱码的问题
  3. 据说这套组合拳,可以把面试官给问懵逼了,你要不要试试?
  4. c++ -- 构造函数与析构函数
  5. 第三篇T语言实例开发,图色操作
  6. 机器学习(三)聚类深度讲解
  7. VUE基本语法1-插值 属性绑定
  8. 前端学习(1048):todolist正在进行和已经完成阶段
  9. php jquery validate remote,jquery插件validate里面的remote参数用法
  10. python画精美图案_Python语言的魅力------完美图案
  11. java比赛_javamq
  12. VC助手使用问题————all instance of the license* are in use .VA will be disabled
  13. WampServer中MySQL中文乱码解决
  14. chrome无法打开某些网页,但safari可以
  15. SQL进阶教程(一)——CASE表达式
  16. 【EXLIBRIS】随笔记 012
  17. 每日学一个设计模式16——仲裁者模式
  18. 苹果手用计算机解锁手机密码,苹果手机密码忘了怎么解锁(解决方法大全)
  19. leecode:977. 有序数组的平方
  20. ResizeObserver loop limit exceeded

热门文章

  1. idas 智能行车服务器,荣威750原车后视镜完美换装WD智能行车服务器,强势升级...
  2. LaTeX自定义封面设计
  3. JS 监听隐藏域值变化
  4. Task6:文本函数查找函数
  5. ArcGIS Pro:OSGB数据转换及发布服务流程
  6. Provider Hosted App中使用JOM问题
  7. 机房收费文档之软件需求说明书
  8. 通俗易懂的带你了解HTTPS的原理
  9. 领扣问题169. 求众数 python解决方案
  10. CentOS,ip addr指令下的lo、ensXX的意思,ip addr指令详解