数据结构之单链表的操作

main函数

 #include <stdio.h>                          #include "./03_linkList.h"                  int main(int argc, const char *argv[])      {                                           linkList* head = creatr_linkList();     insertHead_linkList(head,37);           insertHead_linkList(head,35);           insertHead_linkList(head,28);           insertHead_linkList(head,13);           show_linkList(head);                    insertSort_linkList(head,23);           show_linkList(head);                    selectByposition(head,3);               return 0;                           }                                           

头文件:

 #ifndef __linkList_H__                                                                #define __linkList_H__                                                                typedef int datatype;                                                                 union msg{    //若数据的类型也为int,则不需要这个联合体                               datatype data;                                                                        int len;       //放头结点,记录链表长度                                               };                                                                                    typedef struct node{                                                                  union msg text;                                                                   struct node* next; //指针,由于指针指向这一整个节点,所以类型为struct node*       }linkList;                                                                            linkList* creatr_linkList(void);                                                      void insertHead_linkList(linkList* head,datatype num);                                void show_linkList(linkList* head);                                                   void insertTail_linkList(linkList* head,datatype num);                                void deleteHead_linkList(linkList* head);                                             void deleteTail_linkList(linkList* head);                                             void insertByPositon_linkList(linkList* head,int pos,datatype num);                   void deleteByposition_linkList(linkList* head,int pos);                               void selectByposition(linkList* head,int pos);                                        void insertSort_linkList(linkList* head,datatype num);                                #endif                                                                                

 函数部分:

 #include <stdio.h>                                                                                                                                                         #include <stdlib.h>                                                                                                                                                        #include "./03_linkList.h"                                                                                                                                                 //创建一个带有头指针的单向空链表                                                                                                                                           linkList* creatr_linkList()                                                                                                                                                {                                                                                                                                                                          linkList* head = (linkList*)malloc(sizeof(linkList));                                                                                                                  if(NULL == head)                                                                                                                                                       {                                                                                                                                                                      printf("头结点申请失败!\n");                                                                                                                                      return NULL;                                                                                                                                                       }                                                                                                                                                                      head->text.len = 0;//将链表长度初始化为0                                                                                                                               head->next = NULL;//第一个结点的指针指向空                                                                                                                             return head;                                                                                                                                                           }                                                                                                                                                                          //判断链表是否为空                                                                                                                                                         int isEmpty_linkList(linkList* head)                                                                                                                                       {                                                                                                                                                                          return head->next==NULL ? 1:0;                                                                                                                                         }                                                                                                                                                                          //插入数据                                                                                                                                                                 //头插法                                                                                                                                                                   void insertHead_linkList(linkList* head,datatype num)                                                                                                                      {                                                                                                                                                                          //创建一个新的结点                                                                                                                                                     linkList* temp =(linkList*)malloc(sizeof(linkList));                                                                                                                   if(NULL==temp)                                                                                                                                                         {                                                                                                                                                                      printf("结点申请失败!\n");                                                                                                                                        return;                                                                                                                                                            }                                                                                                                                                                      //定义该节点                                                                                                                                                           temp->text.data=num;//将需要插入的数据赋值给该结点                                                                                                                     temp->next=NULL;//先将插入的结点指向空                                                                                                                                 //先将temp指针指向头指针原先指向的那个元素,然后将头指针重新指向temp                                                                                                   temp->next=head->next;                                                                                                                                                 head->next=temp;                                                                                                                                                       //插入了新的元素,链表长度增加                                                                                                                                         head->text.len++;                                                                                                                                                      return;                                                                                                                                                                }                                                                                                                                                                          //尾插                                                                                                                                                                     void insertTail_linkList(linkList* head,datatype num)                                                                                                                      {                                                                                                                                                                          //创建一个新的结点                                                                                                                                                     linkList* temp =(linkList*)malloc(sizeof(linkList));                                                                                                                   if(NULL==temp)                                                                                                                                                         {                                                                                                                                                                      printf("结点申请失败!\n");                                                                                                                                        return;                                                                                                                                                            }                                                                                                                                                                      //定义该节点                                                                                                                                                           temp->text.data=num;//将需要插入的数据赋值给该结点                                                                                                                     temp->next=NULL;//先将插入的结点指向空                                                                                                                                 linkList* p=head;//定义一个p找到链表的尾部                                                                                                                             while(p->next!=NULL)                                                                                                                                                   {                                                                                                                                                                      p=p->next;                                                                                                                                                         }                                                                                                                                                                      //当p->next==NULL时退出循环,此时就是链表的尾部                                                                                                                        p->next=temp;//直接将尾部指向temp                                                                                                                                  temp->next=NULL;//然后将temp->next指向空                                                                                                                           head->text.len++;                                                                                                                                                  return;                                                                                                                                                                }                                                                                                                                                                          //头删                                                                                                                                                                     void deleteHead_linkList(linkList* head)                                                                                                                                   {                                                                                                                                                                          if(isEmpty_linkList(head))                                                                                                                                             {                                                                                                                                                                      printf("该链表为空,删除失败!\n");                                                                                                                                return;                                                                                                                                                            }                                                                                                                                                                      linkList* temp=head->next;                                                                                                                                             head->next=temp->next;                                                                                                                                                 free(temp);                                                                                                                                                            temp=NULL;                                                                                                                                                             head->text.len--;                                                                                                                                                      return;                                                                                                                                                                }                                                                                                                                                                          //尾删                                                                                                                                                                     void deleteTail_linkList(linkList* head)                                                                                                                                   {                                                                                                                                                                          if(isEmpty_linkList(head))                                                                                                                                             {                                                                                                                                                                      printf("该链表为空,删除失败!\n");                                                                                                                                return;                                                                                                                                                            }                                                                                                                                                                      linkList* temp=head;                                                                                                                                                   while(temp->next->next!=NULL)                                                                                                                                          {                                                                                                                                                                      temp=temp->next;                                                                                                                                                   }                                                                                                                                                                      free(temp->next);                                                                                                                                                      temp->next=NULL;                                                                                                                                                       head->text.len--;                                                                                                                                                      return;                                                                                                                                                                }                                                                                                                                                                          //按位置插入,位置编号从1开始编号                                                                                                                                          void insertByPositon_linkList(linkList* head,int pos,datatype num)                                                                                                         {                                                                                                                                                                          //判断插入的位置是否合法                                                                                                                                               if(pos < 1 || pos >head->text.len+1)                                                                                                                                   {                                                                                                                                                                      printf("插入的位置非法!\n");                                                                                                                                      return;                                                                                                                                                            }                                                                                                                                                                      linkList* p=head;                                                                                                                                                      int i=0;                                                                                                                                                               //利用for循环找到目标位置的前一个结点                                                                                                                                  for(i=0;i<pos-1;i++)                                                                                                                                                   {                                                                                                                                                                      p=p->next;                                                                                                                                                         }                                                                                                                                                                      linkList* temp=(linkList*)malloc(sizeof(linkList));                                                                                                                    if(NULL==temp)                                                                                                                                                         {                                                                                                                                                                      printf("结点申请失败!\n");                                                                                                                                        return;                                                                                                                                                            }                                                                                                                                                                      //定义该节点                                                                                                                                                           temp->text.data=num;//将需要插入的数据赋值给该结点                                                                                                                     temp->next=NULL;//先将插入的结点指向空                                                                                                                                 //插入操作                                                                                                                                                             temp->next=p->next;                                                                                                                                                    p->next=temp;                                                                                                                                                          head->text.len++;                                                                                                                                                      return;                                                                                                                                                                }                                                                                                                                                                          //按位置删除                                                                                                                                                               void deleteByposition_linkList(linkList* head,int pos)                                                                                                                     {                                                                                                                                                                          if(isEmpty_linkList(head))                                                                                                                                             {                                                                                                                                                                      printf("该链表为空,删除失败!\n");                                                                                                                                return;                                                                                                                                                            }if(pos < 1 || pos >head->text.len)                                                                                                                                     {                                                                                                                                                                      printf("删除的位置非法!\n");                                                                                                                                      return;                                                                                                                                                            }                                                                                                                                                                      linkList* p=head;                                                                                                                                                      int i;                                                                                                                                                                 for(i=0;i<pos-1;i++)//找到需要删除位置的前一个结点                                                                                                                     {                                                                                                                                                                      p=p->next;                                                                                                                                                         }                                                                                                                                                                      linkList* temp=p->next;                                                                                                                                                p->next=p->next->next;                                                                                                                                                 free(temp);                                                                                                                                                            temp=NULL;                                                                                                                                                             head->text.len--;                                                                                                                                                      return;                                                                                                                                                                }                                                                                                                                                                          //按位置查找数据,从11开始                                                                                                                                                  void selectByposition(linkList* head,int pos)                                                                                                                              {                                                                                                                                                                          if(isEmpty_linkList(head))                                                                                                                                         {                                                                                                                                                                      printf("该链表为空,查找失败!\n");                                                                                                                                return;                                                                                                                                                            }                                                                                                                                                                      if(pos < 1 || pos >head->text.len)                                                                                                                                     {                                                                                                                                                                      printf("查找的位置非法!\n");                                                                                                                                      return;                                                                                                                                                            }                                                                                                                                                                      int i;                                                                                                                                                                 linkList* p=head;                                                                                                                                                      for(i=0;i<pos;i++)//找到需要查找的结点的位置                                                                                                                           {                                                                                                                                                                      p=p->next;                                                                                                                                                         }                                                                                                                                                                      printf("%d位置的数据是%d\n",pos,p->text.data);                                                                                                                         return;                                                                                                                                                                }                                                                                                                                                                          //直接插入排序                                                                                                                                                             void insertSort_linkList(linkList* head,datatype num)                                                                                                                      {                                                                                                                                                                          linkList* p = head;//用于找到比temp大的前一个数的结点                                                                                                                  linkList* temp=(linkList*)malloc(sizeof(linkList));                                                                                                                    if(NULL==temp)                                                                                                                                                         {                                                                                                                                                                      printf("结点申请失败!\n");                                                                                                                                        return;                                                                                                                                                            }                                                                                                                                                                      //定义该节点                                                                                                                                                           temp->text.data=num;//将需要插入的数据赋值给该结点                                                                                                                     temp->next=NULL;//先将插入的结点指向空                                                                                                                                 //当p->next为空时,即在尾部插入,此时p不需要再偏移了,                                                                                                                 //如果temp插入位置                                                                                                                                                     while(p->next!=NULL && p->next->text.data < temp->text.data)                                                                                                           {                                                                                                                                                                      p=p->next;                                                                                                                                                         }                                                                                                                                                                      temp->next=p->next;                                                                                                                                                    p->next=temp;                                                                                                                                                          head->text.len++;                                                                                                                                                      return;                                                                                                                                                                }                                                                                                                                                                          //遍历该链表                                                                                                                                                               void show_linkList(linkList* head)                                                                                                                                         {                                                                                                                                                                          //定义一个指针指向该链表的头结点,然后将p后移访问该链表中的数据                                                                                                        linkList* p=head;                                                                                                                                                      while(p->next!=NULL)                                                                                                                                                   {                                                                                                                                                                      p=p->next;//将p后移,由于p刚开始指向的是head,不是有效数据,所以先后移再访问数据                                                                                    printf("%d ",p->text.data);//打印p所指向的数据                                                                                                                     }                                                                                                                                                                      printf("\n");                                                                                                                                                          }                                                                                                                                                                          

 Makefile:

 -include ./makefile.cfg     $(Target):$(Obj)$(CC) $^ -o $@%.o:%.c$(CC) $< $(CAN) $@.PHONY: cleanclean:rm $(Obj)

makefile.cfg

Target:=a.out
Obj:=01_main.o 02_linkList.o
CAN:= -c -o
CC:=gcc                               

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/697063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运维SRE-19 网站Web中间件服务-http-nginx

Ans自动化流程 1.网站集群核心协议&#xff1a;HTTP 1.1概述 web服务&#xff1a;网站服务&#xff0c;网站协议即可. 协议&#xff1a;http协议,https协议 服务&#xff1a;Nginx服务&#xff0c;Tengine服务....1.2 HTTP协议 http超文本传输协议&#xff0c;负责数据在网站…

更高效的构建工具-vite

更高效的构建工具-vite 前言Vite是什么Vite和webpack的比较1. 运行原理2. 使用成本 Vite的初体验 前言 首先我们要认识什么时构建工具&#xff1f; 企业级项目都具备什么功能呢&#xff1f; Typescript&#xff1a;如果遇到ts文件&#xff0c;我们需要使用tsc将typescript代码…

Android约束布局中用ConstraintHelper实现过渡动画效果

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 一.创建一个类CircularRevealHelper继承ConstraintHelper代码如下 /*** Author: ly* Da…

【Linux从青铜到王者】 基础IO

本篇重点&#xff1a;文件描述符&#xff0c;重定向&#xff0c;缓冲区&#xff0c;磁盘结构&#xff0c;文件系统&#xff0c;inode理解文件的增删查改&#xff0c;查找一个文件为什么一定要有路径&#xff0c;动静态库&#xff0c;有的时候为什么找不到库&#xff0c;动态库的…

JavaWeb——003Axios Vue组件库(Element)

目录 一、Ajax 1、同步与异步​编辑 2、原生Ajax&#xff08;繁琐&#xff09;​编辑 2.1、写一个简易的Ajax 3、Axios&#xff08;推荐使用&#xff09;​编辑 3.1、Axios入门 3.2、Axios请求方式别名 3.3、案例&#xff1a;基于Vue及Axios完成数据的动态加载展示​编…

Flink CDC 3.0 表结构变更时导致webUI接口无反应原因

Flink CDC 3.0 表结构变更时导致webUI接口无反应&#xff01; 原因&#xff1a;因为deliverCoordinationRequestToCoordinator和requestJob都是SchedulerNG中方法&#xff0c;该类的线程模型是单线程执行&#xff0c;所以在deliverCoordinationRequestToCoordinator执行表结构…

mysql创建数据库,用户授权

一、创建用户 CREATE USER 用户名% IDENTIFIED BY 密码; flush privileges; 二、更新用户密码 update mysql.user set authentication_stringpassword("密码") where userroot; flush privileges; 三、允许root远程登录 update user set host % where user r…

AIoT网关 人工智能物联网网关

AIoT(人工智能物联网)作为新一代技术的代表&#xff0c;正以前所未有的速度改变着我们的生活方式。在这个智能时代&#xff0c;AIoT网关的重要性日益凸显。它不仅是连接智能设备和应用的关键&#xff0c;同时也是实现智能化家居、智慧城市和工业自动化的必备技术。      一…

c# entity freamwork 判断是否存在

在 Entity Framework (EF) 中&#xff0c;你可以使用 LINQ 查询来判断数据库中是否存在特定条件的记录。以下是一些常见的方法&#xff1a; 使用 Any 方法: using (var context new YourDbContext()) {bool exists context.YourEntity.Any(e > e.Property yourValue);i…

【linux进程间通信(二)】共享内存详解以及进程互斥概念

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 进程间通信 1. 前言2. 共享内…

2024年2月23日 晨会汇报

Good morning, colleages! This is /ˈdɑː.tʃi/ speaking. As for my report today, I decide to wing it, so I didnt prepare a script. Now, Ill share an update about my recent work activities which encompasses two key area: a summary of my work yesterday a…

【Go channel如何控制goroutine并发执行顺序?】

多个goroutine并发执行时&#xff0c;每一个goroutine抢到处理器的时间点不一致&#xff0c;gorouine的执行本身不能保证顺序。即代码中先写的gorouine并不能保证先执行 思路&#xff1a;使用channel进行通信通知&#xff0c;用channel去传递信息&#xff0c;从而控制并发执行…

基于开源模型对文本和音频进行情感分析

应用场景 从商品详情页爬取商品评论&#xff0c;对其做舆情分析&#xff1b;电话客服&#xff0c;对音频进行分析&#xff0c;做舆情分析&#xff1b; 通过开发相应的服务接口&#xff0c;进一步工程化&#xff1b; 模型选用 文本&#xff0c;选用了通义实验室fine-tune的st…

电脑录屏软件哪个好用?实测告诉你答案(2024年最新)

在当今信息化快速发展的时代&#xff0c;无论是录制在线课程、游戏操作&#xff0c;还是制作教程、会议记录&#xff0c;一款电脑录屏软件显得尤为重要&#xff0c;可是电脑录屏软件哪个好用呢&#xff1f;本文将介绍三款主流的电脑录屏软件&#xff0c;通过分步骤详细讲述&…

使用maven集成spring在测试的时候报出了如下的异常:version 60

使用maven集成spring在测试的时候报出了如下的异常&#xff1a; Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 60 解决&#xff1a;

在word中将latex格式的公式转化为带有编号的mathtype公式

在word中将latex格式的公式转化为带有编号的mathtype公式 1.先在word里面配置好mathtype2.在word中设置mathtype的格式3.先将latex格式的公式转化为mathml格式4.读到这里&#xff0c;是不是觉得这个方法麻烦 1.先在word里面配置好mathtype 注意&#xff1a;1.word的版本应该是 …

基于springboot+vue的中小型医院网站(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Sovit3D数字孪生平台 助力智慧海上风电场项目加速

我们常说地球是蓝色星球&#xff0c;那是因为海洋约占地球面积的71%。如今&#xff0c;我国正在向“双碳”目标不断奋斗&#xff0c;海上风电也作为一种潜力清洁能源&#xff0c;迸发出前所未有的活力&#xff0c;海上吹来的风成为未来清洁能源新方向。 2024年海上风电项目加速…

Qt_快速安装指南

下载Qt在线安装程序&#xff08;不仔细介绍&#xff09;注册Qt账号&#xff08;不仔细介绍&#xff09;使用快速运行的命令&#xff0c;按照指定的下载地址下载 在Qt指定目录打开cmd命令窗口.\eqt-unified-windows-x86-4.0.1-1-online. exe --mirror https://mirrors.ustc.edu.…

JVM虚拟机结构

虚拟机结构图 从图中看出&#xff1a; JVM虚拟机主要有三大部分组成&#xff1a; 1. 类加载器 2. JVM运行时内存 3. 执行引擎 一、类加载器 类加载器主要用来加载字节码文件&#xff08;.class&#xff09;到内存中 二、内存结构 如图&#xff1a;可将内存分为两大部分&…