寒假 day2

1、请编程实现单向循环链表的头插,头删、尾插、尾删

#include<stdio.h>
#include<string.h>	
#include<stdlib.h>
enum{FALSE=-1,SUCCESS};
typedef int datatype;
//定义节点结构体
//节点:数据域、指针域
typedef struct Node
{//数据域:存储数据元素datatype data;//指针域:存储下一个节点的地址struct Node *next;
}*Linklist;
Linklist insert_head(Linklist head,datatype element);
Linklist create();
void output(Linklist head);
Linklist insert_rear(Linklist head,datatype element);
Linklist det_head(Linklist head);
Linklist det_rear(Linklist head);
int main(int argc, const char *argv[])
{Linklist head=NULL;int n;datatype element;printf("please enter n;");scanf("%d",&n);for(int i=0;i<n;i++){printf("please enter %d element:",i+1);scanf("%d",&element);head=insert_head(head,element);//头插//head=insert_rear(head,element);//尾插}//遍历output(head);//头删head=det_head(head);output(head);//尾删head=det_rear(head);output(head);return 0;
}
//创建新节点
Linklist create()
{Linklist s=(Linklist)malloc(sizeof(struct Node));if(NULL==s)return NULL;s->data=0;s->next=s;return s;
}//头插入
Linklist insert_head(Linklist head,datatype element)
{//创建新节点Linklist s=create();s->data=element;//判断链表是否为空if(NULL==head){head=s;}else{Linklist p=head;//找到最后一个节点while(p->next!=head){p=p->next;}s->next=head;head=s;//尾节点的指针域指向headp->next=head;}//思路2://s是第一个节点,定义一个二级指针代表s节点//头插时s不断后移,因此二级指针永远是最后一个节点//所以,可以不用循环寻找最后一个节点//二级指针直接指向head即可//此思路因不用循环查找,时间复杂度降低return head;
}//遍历输出
void output(Linklist head)
{//判断链表是否为空if(NULL==head){puts("empty");return;}//输出Linklist p=head;do //先执行 后判断{printf("%d ",p->data);p=p->next;//后移}while(p!=head);puts("");
}//尾插
Linklist insert_rear(Linklist head,datatype element)
{//创建新节点Linklist s=create();s->data=element;//判断链表是否为空if(NULL==head){head=s;}else //存在多个链表{Linklist p=head;//找到最后一个节点while(p->next!=head){p=p->next;}p->next=s;//尾节点的指针域指向heads->next=head;}return head;
}//头删
Linklist det_head(Linklist head)
{//判断链表是否为空if(NULL==head)return head;//存在多个节点 >=1Linklist del=head;Linklist p=head;while(p->next!=head)p=p->next;head=head->next;free(del);del=NULL;//尾节点的指针域指向headp->next=head;return head;
}
//尾删
Linklist det_rear(Linklist head)
{//判断链表是否为空if(NULL==head)return head;//一个节点else if(head->next==head){free(head);head=NULL;return head;}//多个节点 >=2else{Linklist del=head;//找到倒数第二个节点while(del->next->next!=head){del=del->next;}free(del->next);//倒数第二个节点指针域指向headdel->next=head;return head;}
}


2、请编程实现单向循环链表约瑟夫环
约瑟夫环:用循环链表编程实现约瑟夫问题
n个人围成一圈,从某人开始报数1,2,..., m,数到m的人出圈,然后从出圈的下一个人(m+1)开始重复此过程
直到 全部人出圈,于是得到一个出圈人员的新序列
如当n=8,m=4时,若从第一个位置数起,则所得到的新的序列 为4,8,5,2,1,3,7,6

#include<stdio.h>
#include<string.h>	
#include<stdlib.h>
enum{FALSE=-1,SUCCESS};
typedef int datatype;
//定义节点结构体
//节点:数据域、指针域
typedef struct Node
{//数据域:存储数据元素datatype data;//指针域:存储下一个节点的地址struct Node *next;
}*Linklist;
Linklist create();
void output(Linklist head);
Linklist insert_rear(Linklist head,datatype element);
Linklist yusef(Linklist head,int n,int m);
int main(int argc, const char *argv[])
{Linklist head=NULL;int n;datatype element;printf("please enter n;");scanf("%d",&n);for(int i=0;i<n;i++){printf("please enter %d element:",i+1);scanf("%d",&element);head=insert_rear(head,element);//尾插}//约瑟夫循环输出int m;printf("please enter m:");scanf("%d",&m);head=yusef(head,n,m);output(head);return 0;
}
Linklist yusef(Linklist head,int n,int m)
{if(NULL==head)return head;Linklist p=head;for(int i=0;i<n;i++)//轮数{for(int j=0;j<m-2;j++)//次数{p=p->next;}Linklist del=p->next;p->next=del->next;printf("%-5d",del->data);free(del);del=NULL;p=p->next;}return NULL;
}
//创建新节点
Linklist create()
{Linklist s=(Linklist)malloc(sizeof(struct Node));if(NULL==s)return NULL;s->data=0;s->next=s;return s;
}
//遍历输出
void output(Linklist head)
{//判断链表是否为空if(NULL==head){puts("empty");return;}//输出Linklist p=head;do //先执行 后判断{printf("%d ",p->data);p=p->next;//后移}while(p!=head);puts("");
}
//尾插
Linklist insert_rear(Linklist head,datatype element)
{//创建新节点Linklist s=create();s->data=element;//判断链表是否为空if(NULL==head){head=s;}else //存在多个链表{Linklist p=head;//找到最后一个节点while(p->next!=head){p=p->next;}p->next=s;//尾节点的指针域指向heads->next=head;}return head;
}


3、请编程实现单向循环链表的排序

#include<stdio.h>
#include<string.h>	
#include<stdlib.h>
enum{FALSE=-1,SUCCESS};
typedef int datatype;
//定义节点结构体
//节点:数据域 指针域
typedef struct Node
{//数据域:存储数据元素datatype data;//指针域:存储下一个节点的地址struct Node *next;
}*Linklist;
Linklist create()
{Linklist s=(Linklist)malloc(sizeof(struct Node));if(NULL==s)return NULL;//成功则初始化s->data=0;s->next=s;return s;
}
int length(Linklist head)
{int len=0;Linklist p=head;while(p->next!=head){len++;p=p->next;}len++;return len;
}
Linklist insert_rear(Linklist head,datatype element)
{//创建新节点sLinklist s=create();s->data=element;//1,判断链表是否为空if(NULL==head)head=s;else//2,存在多个节点{//循环到最后一个节点Linklist p=head;while(p->next!=head){p=p->next;}p->next=s;//尾节点的指针域指向头s->next=head;}return head;
}
void output(Linklist head)
{//1,判断链表是否为空if(NULL==head){puts("empty");return;}//2,循环遍历Linklist p=head;do{printf("%-5d",p->data);p=p->next;//后移}while(p!=head);puts("");
}
void Bubble(Linklist head)
{if(NULL==head)return;int len=length(head);for(int i=1;i<len;i++){Linklist p=head;for(int j=0;j<len-i;j++){if(p->data > p->next->data){datatype t=p->data;p->data=p->next->data;p->next->data=t;}p=p->next;}}
}
int main(int argc, const char *argv[])
{Linklist head=NULL; //定义单链表的头指针int n;datatype element;//插入的值printf("please enter n:");scanf("%d",&n);for(int i=0;i<n;i++){printf("please enter %d element:",i+1);scanf("%d",&element);//	head=insert_head(head,element);head=insert_rear(head,element);}Bubble(head);output(head);return 0;
}

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

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

相关文章

美国纳斯达克大屏怎么投放:投放完成需要多长时间-大舍传媒Dashe Media

陕西大舍广告传媒有限公司&#xff08;Shaanxi Dashe Advertising Media Co., Ltd&#xff09;&#xff0c;简称大舍传媒&#xff08;Dashe Media&#xff09;&#xff0c;是纳斯达克在中国区的总代理&#xff08;China General Agent&#xff09;。与纳斯达克合作已经有八年的…

Visual Studio 最新版安装教程

Visual Studio简介 Visual Studio是一个集成开发环境&#xff08;IDE&#xff09;&#xff0c;广泛应用于.NET和C工作负载以及许多其他语言和框架的开发。它提供了一套完整的工具集&#xff0c;包括UML工具、代码管控工具、集成开发环境&#xff08;IDE&#xff09;等&#xff…

css1引入方式

一.行内样式表(行内式&#xff09;&#xff08;用在标签内部&#xff09;&#xff08;用于修改一些简单的&#xff09; 二.内部样式表&#xff08;嵌入式&#xff09;&#xff08;平常练习的呢种&#xff09; 三 .外部样式表&#xff08;链接式&#xff09; 写在一个单独的文件…

Hadoop3.x基础(3)- Yarn

来源&#xff1a;B站尚硅谷 目录 Yarn资源调度器Yarn基础架构Yarn工作机制作业提交全过程Yarn调度器和调度算法先进先出调度器&#xff08;FIFO&#xff09;容量调度器&#xff08;Capacity Scheduler&#xff09;公平调度器&#xff08;Fair Scheduler&#xff09; Yarn常用命…

ele-h5项目使用vue3+vite开发:第四节、业务组件-SearchView组件开发

需求分析 展示切换动画搜索框输入文字&#xff0c;自动发送请求搜索结果展示搜索状态维护历史搜索展示&#xff0c;点击历史搜索后发送请求历史搜索更多切换动画效果 <script setup lang"ts"> import OpSearch from /components/OpSearch.vue import { ref } f…

苹果CMS挖片网升级版视频主题模版源码

自适应视频站正版高级挖片网收录模板&#xff0c;模板不错&#xff0c;是挖片网的升级版。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88799583 更多资源下载&#xff1a;关注我。

第十二篇【传奇开心果系列】Python的OpenCV技术点案例示例:视频流处理

传奇开心果短博文系列 系列短博文目录Python的OpenCV技术点案例示例短博文系列短博文目录一、前言二、视频流处理介绍三、实时视频流处理示例代码四、视频流分析示例代码五、归纳总结系列短博文目录 Python的OpenCV技术点案例示例短博文系列 短博文目录 一、前言 OpenCV视频…

UnityShader(十四)纹理

目录 前言&#xff1a; 单张纹理实现效果&#xff1a; 效果&#xff1a; 前言&#xff1a; 纹理最初的目的是用一张图片来控制模型的外观。使用纹理映射技术我们可以把一张图“贴”在模型表面&#xff0c;逐纹素&#xff08;文素的名字是为了和像素进行区分&#xff09;控制…

js数组和字符串之间的转换方式以及数组的一些方法

一、数组和字符串之间的转换方式 1&#xff09;将字符串切割成字符串数组—stringObject.split(separator, howmany) seperator-----字符串、正则表达式&#xff0c;必需 howmany------指定返回的数组的最大长度&#xff0c;可省略&#xff0c;省略后全量返回 源代码 var str&q…

VBA技术资料MF114:批量给Word文档添加页眉

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

改进的 K-Means 聚类方法介绍

引言 数据科学的一个中心假设是&#xff0c;紧密度表明相关性。彼此“接近”的数据点是相似的。如果将年龄、头发数量和体重绘制在空间中&#xff0c;很可能许多人会聚集在一起。这就是 k 均值聚类背后的直觉。 我们随机生成 K 个质心&#xff0c;每个簇一个&#xff0c;并将…

聊聊并发编程,另送5本Golang并发编程新书

大家好&#xff0c;我是飞哥&#xff01; 并发编程并不是一个新话题&#xff0c;但是我觉得在近几年以及未来的时间里&#xff0c;并发编程将显得越来越重要。 为什么这样讲&#xff0c;让我们先回到一个基本的问题上来&#xff0c;为什么我们要采用并发编程&#xff1f;关于这…