单向循环链表的操作

main函数:

 #ifndef __loopLinkList_H__#define __loopLinkList_H__typedef int datatype;union msg{    //若数据的类型也为int,则不需要这个联合体datatype data;int len;       //放头结点,记录链表长度};typedef struct node{union msg text;struct node* next; //指针,由于指针指向这一整个节点,所以类型为struct node*}loopLinkList;loopLinkList* create_loopLinkList(void);void insertHead_loopLinkList(loopLinkList* head,datatype num);void insertTail_loopLinkList(loopLinkList* head,datatype num);void deleteHead_loopLinkList(loopLinkList* head);void deleteTail_loopLinkList(loopLinkList* head);void show_loopLinkList(loopLinkList* head);#endif                                                                          

功能函数:

#include<stdio.h>                                                                
#include <stdlib.h>                                                              
#include "./13_loopLinkList.h"                                                   
//创建一个单向循环链表                                                           
loopLinkList* create_loopLinkList()                                              
{                                                                                //定义头结点并初始化                                                         loopLinkList* head=(loopLinkList*)malloc(sizeof(loopLinkList));              head->next=head;                                                             head->text.len=0;                                                            return head;                                                                 
}                                                                                
//判断链表是否为空                                                               
int isEmpty_loopLinkList(loopLinkList* head)                                     
{                                                                                //1表示链表为空,0表示链表不为空                                             return head->next==head?1:0;                                                 
}                                                                                
//头插                                                                           
void insertHead_loopLinkList(loopLinkList* head,datatype num)                    
{                                                                                //申请一个空间定义一个新的结点                                               loopLinkList* temp=(loopLinkList*)malloc(sizeof(loopLinkList));              if(NULL == temp)                                                             {                                                                            printf("结点定义失败!\n");                                              return;                                                                  }                                                                            //初始化这个结点                                                             temp->text.data=num;                                                         temp->next=NULL;                                                             //插入                                                                       temp->next=head->next;                                                       head->next=temp;                                                             head->text.len++;                                                            return;                                                                      
}                                                                                
//尾插                                                                           
void insertTail_loopLinkList(loopLinkList* head,datatype num)                    
{                                                                                //申请一个空间定义一个新的结点                                               loopLinkList* temp=(loopLinkList*)malloc(sizeof(loopLinkList));              if(NULL == temp)                                                             {                                                                            printf("结点定义失败!\n");                                              return;                                                                  }                                                                            //初始化这个结点                                                             temp->text.data=num;                                                         temp->next=NULL;                                                             //找到链表最后一个结点                                                       loopLinkList* p=head;                                                        while(p->next!=head)                                                         {                                                                            p=p->next;                                                               }                                                                            //插入temp                                                                   temp->next=head;                                                             p->next=temp;                                                                head->text.len--;                                                            return;                                                                      
}   
//按位置插入                                                               
void insertByPositon_loopLinkList(loopLinkList* head,datatype num,int pos) 
{                                                                          if(pos<1 || pos >head->text.len+1)                                     {                                                                      printf("插入位置不合法!\n");                                      }                                                                      loopLinkList* temp = (loopLinkList*)malloc(sizeof(loopLinkList));      temp->text.data=num;                                                   temp->next=NULL;                                                       loopLinkList* p=head;                                                  int i;                                                                 for(i=0;i<pos-1;i++)                                                   {                                                                      p=p->next;                                                         }                                                                      temp->next=p->next;                                                    p->next=temp;                                                          head->text.len++;                                                      return;                                                                
}                                                                          
//头删                                                                     
void deleteHead_loopLinkList(loopLinkList* head)                           
{                                                                          if(isEmpty_loopLinkList(head))                                         {                                                                      printf("链表为空,删除失败!\n");                                   return;                                                            }                                                                      loopLinkList* temp=head->next;                                         head->next=temp->next;                                                 free(temp);                                                            head->text.len--;                                                      return;                                                                
}                                                                          //尾删                                                          void deleteTail_loopLinkList(loopLinkList* head)                {                                                               if(isEmpty_loopLinkList(head))                              {                                                           printf("链表为空,删除失败!\n");                        return;                                                 }                                                           loopLinkList* p=head;                                       while(p->next->next!=head)                                  {                                                           p=p->next;                                              }                                                           free(p->next);                                              p->next=head;                                               head->text.len--;                                           return;                                                     }                                                               //按位置删除                                                    void deleteBypos_loopLinkList(loopLinkList* head,int pos)       {                                                               if(isEmpty_loopLinkList(head))                          {                                                           printf("链表为空,删除失败!\n");                        return;                                                 }                                                           loopLinkList* p=head;                                       int i;                                                      for(i=0;i<pos-1;i++)                                        {                                                           p=p->next;                                              }                                                           free(p->next);                                              p->next=p->next->next;                                      head->text.len--;                                           return;                                                     }                                                               //遍历                                                          void show_loopLinkList(loopLinkList* head)                      {                                                               loopLinkList* p=head;                                       if(isEmpty_loopLinkList(head))                              {                                                           printf("链表为空!\n");                                 return;                                                 }                                                           while(p->next!=head)                                        {                                                           p=p->next;                                              printf("%d ",p->text.data);                             }                                                           printf("\n");                                               return;                                                     }   
//约瑟夫问题 void josepg_loopLinkList(int n ,int k,int m){loopLinkList* head = create_loopLinkList();//将1到n的数据插入到循环列表中int i=0;for(i=1;i<=n;i++){insertTail_loopLinkList(head,i);}//删除头结点,将头指针指向头结点后的第一个有效数据loopLinkList* p=head;while(p->next!=head){p=p->next;}//p就是当前链表的尾结点//移动头指针到第一个有效数据head=head->next;//释放头结点free(p->next);//将尾结点的指针指向第一个有效数据p->next=head;//通过循环找到编号为1的位置p=head;for(i=0;i<k-1;i++){p=p->next;}//p就是编号为1的位置while(p->next != p)//当链表中只有一个结点时退出循环{//找到要出列的那个数的前一个结点for(i=0;i<m-2;i++){p=p->next;}//p就是要出列的前一个结点//将要数列的那个结点存起来,后面方便释放loopLinkList* temp = p->next;//将p的指针域指向要出列的结点的下一个结点,即将要出列的那个节点删除p->next = temp->next;//打印出列的结点里面的数printf("%d ",temp->text.data);//释放该结点free(temp);                                                                    temp=NULL;//将刚刚出队的下一个结点置为1p=p->next;}//上述循环后,整个链表中还剩一个结点printf("%d\n",p->text.data);free(p);p=NULL;}

头文件:

 #ifndef __loopLinkList_H__                                                                                             #define __loopLinkList_H__                                                                                             typedef int datatype;                                                                                                  union msg{    //若数据的类型也为int,则不需要这个联合体                                                                datatype data;                                                                                                         int len;       //放头结点,记录链表长度                                                                                };                                                                                                                     typedef struct node{                                                                                                   union msg text;                                                                                                    struct node* next; //指针,由于指针指向这一整个节点,所以类型为struct node*                                        }loopLinkList;                                                                                                         loopLinkList* create_loopLinkList(void);                                                                               void insertHead_loopLinkList(loopLinkList* head,datatype num);                                                         void insertByPositon_loopLinkList(loopLinkList* head,datatype num,int pos);                                            void insertTail_loopLinkList(loopLinkList* head,datatype num);                                                         void deleteHead_loopLinkList(loopLinkList* head);                                                                      void deleteTail_loopLinkList(loopLinkList* head);                                                                      void show_loopLinkList(loopLinkList* head);                                                                            
void josepg_loopLinkList(int n,int k,int m);void deleteBypos_loopLinkList(loopLinkList* head,int pos);#endif                                                                                                                 

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

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

相关文章

Istio实战:Istio Kiali部署与验证

目录 前言一、Istio安装小插曲 注意事项 二、Kiali安装三、Istio测试参考资料 前言 前几天我就开始捣腾Istio。前几天在执行istioctl install --set profiledemo -y 的时候老是在第二步就报错了&#xff0c;开始我用的istio版本是1.6.8。 后面查看k8s与istio的版本对应关系后发…

vCenter、vSphere Client硬盘扩容详解

文章目录 1、需求2、vSphere 操作流程3、服务器操作3.1、查看分区空间大小3.2、列出所有可用块设备的信息3.3、新建分区3.4、重读分区表信息3.5、格式化分区信息3.6、查看卷组的详细状态3.7、创建物理卷3.8、扩容卷组3.9、逻辑卷在线扩容3.10、显示物理卷属性3.11、XFS 文件系统…

最少停车数(C 语言)

题目描述 特定大小的停车场&#xff0c;数组cars[]表示&#xff0c;其中1表示有车&#xff0c;0表示没车。车辆大小不一&#xff0c;小车占一个车位&#xff08;长度1&#xff09;&#xff0c;货车占两个车位&#xff08;长度2&#xff09;&#xff0c;卡车占三个车位&#xf…

Rollup + Ts

Rollup Ts RollupTs demo 一、文件配置 | - src | | - utils | | | - .ts | | - .babelrc | | - main.js | | - style.css | - package.json | - rollup.config.js | - tsconfig.json二、插件下载 rollup // rollup 基本的包 typescript // ts 包 rollup/plug…

如何做bug分析 ?bug分析什么 ? 为什么要做bug分析 ?

每当我们完成一个版本测试时&#xff0c;总会在测试报告中添加一些分析bug的指标 &#xff0c;主要用于分析在测试过程中存在的问题 。但是在分析的过程中你就可能遇到如下的问题 &#xff1a; 我应该分析那些指标呢 &#xff1f;每一个具体的指标该如何分析 &#xff1f;它能说…

Vue3学习——computed、watch、watchEffect

computed 与Vue2.x中computed配置功能一致写法 import {computed} from vuesetup(){...//计算属性——简写let fullName computed(()>{return person.firstName - person.lastName})//计算属性——完整let fullName computed({get()return person.firstName - perso…

算法——模拟

1. 什么是模拟算法&#xff1f; 官方一点来说 模拟算法&#xff08;Simulation Algorithm&#xff09;是一种通过模拟现实或抽象系统的运行过程来研究、分析或解决问题的方法。它通常涉及创建一个模型&#xff0c;模拟系统中的各种事件和过程&#xff0c;以便观察系统的行为&a…

Redis缓存一致性问题(自用记录)

背景 在开发过程中&#xff0c;redis缓存技术被大范围应用。由于现在的系统大多是分布式的&#xff0c;高并发的&#xff0c;redis和传统的数据库&#xff0c;存在数据不一致的问题。 解决方案 本文主要探讨两者数据不一致的解决方案&#xff1a; 给缓存设置过期时间&#x…

dell戴尔电脑灵越系列Inspiron 15 3520原厂Win11系统中文版/英文版

Dell戴尔笔记本灵越3520原装出厂Windows11系统包&#xff0c;恢复出厂开箱预装OEM系统 链接&#xff1a;https://pan.baidu.com/s/1mMOAnvXz5NCDO_KImHR5gQ?pwd3nvw 提取码&#xff1a;3nvw 原厂系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、Office办公软件、MyD…

Jmeter接口测试 ,这应该是全网最详细的教程了

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、Jmeter 的使用步骤 打开Jmeter 安装包&#xff0c;进入\bi…

postman-使用Postman的模拟服务来模拟(mock)后端数据,完成前端模拟API调用

最近项目上比较忙&#xff0c;任务多时间紧&#xff0c;导致后端开发任务繁多&#xff0c;无法及时开发完毕&#xff0c;但是前端同学已经把对应功能开发完成&#xff0c;需要进行前后端联调来验证API及一些交互问题&#xff1b;这不能因为后端的进度来影响前端的工作完成情况&…

【Linux进程】冯·诺依曼体系结构以及操作系统的深入理解

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1.冯诺依曼体系结构特…

kafka和ZK的关系

zk相当于是kafka的一个基础设施 Kafka是一种高吞吐量、可扩展的分布式发布订阅消息系统&#xff0c;ZooKeeper是一个分布式协调服务&#xff0c;用于管理和协调分布式系统中的各种资源 Zookeeper&#xff1a;管理broker&#xff0c;consumer 创建broker后&#xff0c;向zk注册…

适用于生物行业的样本管理系统

在生物样本管理系统的应用中&#xff0c;我们首先需要了解生物样本的特点和要求。生物样本具有多样性和易变性&#xff0c;需要被妥善保存和跟踪&#xff0c;以确保其质量和可用性。 因此&#xff0c;一个有效的生物样本管理系统需要具备以下特点&#xff1a; 全面性&#xff1…

Spring Event的原理以及缺陷

原理:Spring 事件监听机制及原理分析 - Admol - 博客园 (cnblogs.com) 使用bug:Spring Event 别瞎用&#xff01;从我司的悲剧中&#xff0c;我总结了6 条最佳实践&#xff01;-腾讯云开发者社区-腾讯云 (tencent.com)

2024最新任推邦邀请码是什么

任推邦是一款非常受欢迎的推广APP&#xff0c;任推邦邀请码是【222222】获得现金奖励和提成奖励用户可以通过邀请好友加入来获取收益。2024最新的任推邦邀请码是【222222】&#xff0c;小编已经给大家整理好了他趣许多的邀请码&#xff0c;想要领取奖励的小伙伴快来和小编一起了…

聚合函数()不要随意加空格

报错&#xff1a;1630 - FUNCTION link.SUM does not exist. Check the Function Name Parsing and Resolution section in the Reference Manual 解决方法&#xff1a;count、avg、sum等函数后紧随的()之间不能加空格&#xff0c;去掉这个空格即可&#xff0c;因为count()、a…

js 监听元素是否出现在可视区域--IntersectionObserver

观察者模式监听判断dom元素是否在可视区域内 本项目是使用vue3的写法。 1.IntersectionObserver IntersectionObserver可以用来自动监听元素是否进入了设备的可视区域之内&#xff0c;而不需要频繁的计算来做这个判断。由于可见&#xff08;visible&#xff09;的本质是&…

融中穿刺路径角度评估的C++技术实现

消融模型的三维渲染 我们以肝部为例&#xff0c;通常肝部在做消融手术规划时有几个步骤。 一三维重建&#xff1a; 对器官进行图像分割&#xff1b; 对肿瘤的原发区域GTV进行勾画。 二穿刺路径的规划&#xff1a; 路径规划当中有几个约束&#xff1a;穿刺深度、危及器官的…

OpenAI推出首个AI视频模型Sora:重塑视频创作与体验

链接&#xff1a;华为OD机考原题附代码 Sora - 探索AI视频模型的无限可能 随着人工智能技术的飞速发展&#xff0c;AI视频模型已成为科技领域的新热点。而在这个浪潮中&#xff0c;OpenAI推出的首个AI视频模型Sora&#xff0c;以其卓越的性能和前瞻性的技术&#xff0c;引领着…