有趣的数据结构算法7——双向循环链表的实例应用

2023-11-07

有趣的数据结构算法7——双向循环链表的实例应用

问题复述

要求实现用户输入一个数字改变26个字母的排列顺序。正常情况下26个字母的排列顺序是A B C D E F G H I J K L M N O P Q R S T U V W X Y Z。
当用户输入3时,字母的排列顺序改为D E F G H I J K L M N O P Q R S T U V W X Y Z A B C。
当用户输入-3时,字母的排列顺序改为X Y Z A B C D E F G H I J K L M N O P Q R S T U V W 。
刚学完循环链表和双向链表的我看到这个问题,太简单了。我相信:
在这里插入图片描述

解题思路

我们可以将26个英文字母排列成一个双向循环链表,头指针指向A,此时如果输入的数字是正数,则

for (int i = 0; i < num; i++){	//num代表输入的数字
	s = s->Next;
}

此时如果输入的数字是负数,则

for (int i = 0; i < -num; i++){	 //num代表输入的数字
	s = s->Before;
}

此时再从s结点开始遍历整个链表,便可以得到全新排列的26个字母。

实现代码

#include <stdio.h>
#include <stdlib.h>

struct Node{
	char c;
	struct Node* Next;
	struct Node* Before;
};

typedef struct Node* List;

//声明函数
List createList();
void ScanList(List list);
void mission(int num, List list);

int main(void){
	List ok;
	int num;
	ok = createList();
	printf("请输入一个数字:");
	scanf("%d", &num);
	mission(num, ok);
}

List createList(){
	List s, p;
	List Head;
	char c = 'A';
	
	int i;
	Head= (List)malloc(sizeof(struct Node));
	s = Head;				//头结点节点初始化
	s->c = c;
	s->Next = s;		
	s->Before = s;
	for (i = 1; i < 26; i++){	
		c = c + 1;
		p = (List)malloc(sizeof(struct Node));
		s->Next = p;		//此处一共具有三个List节点,head始终指向头部
		p->Before = s;		//p节点是临时节点,用作每一次插入新节点。
		Head->Before = p;	//s节点每次都进行s=s->Next更新,始终指向尾节点。
		p->Next = Head;
		s = s->Next;
		p->c = c;
	}
	return Head;
}

void ScanList(List list){
	List s = list;
	printf("%c ", s->c);	//从头到尾遍历链表
	s = s->Next;
	while (s != list){
		printf("%c ", s->c);
		s = s->Next;
	}
}

void mission(int num, List list){
	List s = list;
	if (num > 0)
	{
		for (int i = 0; i < num; i++){	//num代表输入的数字
			s = s->Next;
		}
	}
	else{
		for (int i = 0; i < -num; i++){	//num代表输入的数字
			s = s->Before;
		}
	}
	ScanList(s);
}

GITHUB下载连接

https://github.com/bubbliiiing/Data-Structure-and-Algorithm

希望得到朋友们的喜欢。
有问题的朋友可以提问噢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有趣的数据结构算法7——双向循环链表的实例应用 的相关文章

  • 数据结构之数组

    目录 前言 线性表与连续内存 数组是如何支持随机访问 数组的插入与删除 数组越界 总结 参考文章 前言 数组是我们平时开发中经常遇到的一种数据结构 提起数组 我们能想到最大的特点就是 要提前定义好 需要提前申请好内存空间 数组是一种线性表数
  • 【数据结构】单向链表的修改和删除

    单向链表的修改和删除 从单链表中删除一个节点思路 1 找到需要删除节点的前一个节点temp 2 temp next temp next next 3 被删除的节点 将不会有其他引用指向 会被垃圾处理机制回收 1 单向链表的修改操作 1 1
  • 算法问题实战策略

    算法问题实战策略 基本信息作者 韩 具宗万 译者 崔盛一出版社 人民邮电出版社ISBN 9787115384621上架时间 2015 2 4出版日期 2015 年3月开本 16开页码 738版次 1 1 内容简介 算法问题实战策略 本书收录
  • 关于uthash 的初步源码阅读

    背景 在偶然的mqtt mosquitto 中的源码中查看的关于topic的处理 知道了哈希表这种的数据结构 最近花了一点时间将这个部分的源码看了一部分 不知道后面还有没有时间继续查看所以就写一篇文档作为笔记吧 uthash 使用 utha
  • 如何学好C语言的数据结构与算法?

    C语言的数据结构与算法 难就难在链表 学会了链表 可能后面就一点都不难了 书籍推荐 数据结构与算法分析 C语言描述版 要深入学习的话可以选择这本书 因为针对链表的讲解是比较详细的 所以可以很快理解链表 跟着书上一点点实现基本操作 增删改查
  • 数理统计知识整理——回归分析与方差分析

    题记 时值我的北科研究生第一年下 选学 统计优化 课程 备考促学 成此笔记 以谨记 1 线性回归 1 1 原理分析 要研究最大积雪深度x与灌溉面积y之间的关系 测试得到近10年的数据如下表 使用线性回归的方法可以估计x与y之间的线性关系 线
  • 数据结构之双向链表,实现双向链表的增删改查

    目录 一 双向链表的定义 1 双向链表节点的定义 2 双向链表的初始化 二 双向链表的函数接口实现 1 双链表的尾插 2 双向链表的尾删 3 双向链表的头插 4 双向链表的头删 6 双向链表在pos前面插入 7 双向链表删除pos位置的节点
  • 查找数组中第二大的数

    快速找出一个数组中的最大数 第二大数 思路 如果当 前元素大于最大数 max 则让第二大数等于原来的最大数 max 再把当前元素的值赋给 max 如果当前的元素大于等于第二大数secondMax的值而小于最大数max的值 则要把当前元素的值
  • 华为OD机试真题-最长子字符串的长度(一)-2023年OD统一考试(C卷)

    题目描述 给你一个字符串 s 字符串s首尾相连成一个环形 请你在环中找出 o 字符出现了偶数次最长子字符串的长度 输入描述 输入是一串小写字母组成的字符串 输出描述 输出是一个整数 补充说明 1 lt s length lt 5 x 10
  • 带头双向循环链表:一种高效的数据结构

    博客主页 江池俊的博客 收录专栏 数据结构探索 专栏推荐 cpolar C语言进阶之路 代码仓库 江池俊的代码仓库 编译环境 Visual Studio 2022 欢迎大家点赞 评论 收藏 文章目录 一 带头循环双向链表的概念及结构 二 使
  • 算法题-简单系列-06-删除有序链表中重复的元素

    文章目录 1 题目 1 1 循环遍历 1 题目 1 1 循环遍历 既然连续相同的元素只留下一个 我们留下哪一个最好呢 当然是遇到的第一个元素了 因为第一个元素直接就与前面的链表节点连接好了 前面就不用管了 只需要跳过后面重复的元素 连接第一
  • Leetcode1094. 拼车

    Every day a Leetcode 题目来源 1094 拼车 解法1 差分数组 对于本题 设 a i 表示车行驶到位置 i 时车上的人数 我们需要判断是否所有 a i 都不超过 capacity trips i 相当于把 a 中下标从
  • 【数据结构入门精讲 | 第二篇】一文讲清算法复杂度

    上篇文章中我们引入了算法 数据结构 数据类型等概念 而要想衡量一个算法与数据结构是否为优质的 就需要一个衡量标准 这个衡量标准也是在我们实现一个好的算法时要遵循的原则 目录 基本概念 渐进性态 渐进性态数学表征 算法复杂度的运算 顺序搜索算
  • 剑指 Offer(第2版)面试题 35:复杂链表的复制

    剑指 Offer 第2版 面试题 35 复杂链表的复制 剑指 Offer 第2版 面试题 35 复杂链表的复制 解法1 模拟 剑指 Offer 第2版 面试题 35 复杂链表的复制 题目来源 48 复杂链表的复刻 解法1 模拟 算法 复制原
  • 华为OD机试 C++【最大载货量】

    描述 在火车站旁的货运站 小明负责调度2K辆中转车 其中K辆用于干货 K辆用于湿货 每批到站的货物来自不同的供货商 需要按照顺序装入中转车 注意 一个供货商的货物只能装在一辆车上 不能分开 但是 一辆车可以放多个供货商的货物 问题是 要让所
  • 《LeetCode力扣练习》代码随想录——双指针法(反转链表---Java)

    LeetCode力扣练习 代码随想录 双指针法 反转链表 Java 刷题思路来源于 代码随想录 206 反转链表 双指针 Definition for singly linked list public class ListNode int
  • 【LeetCode:114. 二叉树展开为链表 | 二叉树 + 递归】

    算法题 算法刷题专栏 面试必备算法 面试高频算法 越难的东西 越要努力坚持 因为它具有很高的价值 算法就是这样 作者简介 硕风和炜 CSDN Java领域新星创作者 保研 国家奖学金 高中学习JAVA 大学完善JAVA开发技术栈 面试刷题
  • 带头双向循环链表基础

    带头双向循环链表基础 销毁 销毁 void ListDestory ListNode phead void ListDestory ListNode phead assert phead ListNode cur phead gt next
  • 「优选算法刷题」:移动零

    嗨 这个假期罗根开始接触了算法 在为今年的蓝桥杯做准备 所以 开个新专栏 记录记录自己做算法题时的心得 一 题目 给定一个数组 nums 编写一个函数将所有 0 移动到数组的末尾 同时保持非零元素的相对顺序 请注意 必须在不复制数组的情况下
  • 最大流-Dinic算法,原理详解,四大优化,详细代码

    文章目录 零 前言 一 概念回顾 可略过 1 1流网络 1 2流 1 3最大流 1 4残留网络 1 5增广路

随机推荐

  • 【JAVA】log4j.xml详解

    Appender Appender 日志输出器 配置日志的输出级别 输出位置等 包括以下几类 ConsoleAppender 日志输出到控制台 FileAppender 输出到文件 RollingFileAppender 输出到文件 文件达
  • react:重置清除数据的方法

    描述如下 1 页面进来没有数据 只有输入条件的情况下 才能查询数据 2 查询条件有重置功能 问题 重置功能如何操作呢 数据是从 this props 中取到的 在重置的时候 1 方法一 不调接口 this props xxx 或者 this
  • 读文件 —— WEB前端读取本地文件内容哪些事(前台解析txt文件)…… – 杰儿__er 的博客 – CSDN博客...

    文章目录 隐藏 读文件 WEB前端读取本地文件内容哪些事 前台解析txt文件 参考链接 https blog csdn net pl1612127 article details 77862174可供参考的链接 https zhidao b
  • android dialog对话框,Android Dialog对话框详解

    废话不多说了 直接给大家贴代码了 布局文件xml xmlns tools http schemas android com tools android layout width match parent android layout hei
  • Windows下使用命令行登陆、操作MYSQL5.7数据库

    一 运行数据库 1 启动服务 net start mysql 2 连接数据库 mysql h IP地址 u 数据库 p mysql u 数据库 p 如 mysql u root p mysql h127 0 0 1 u root p 二 查
  • IntelliJ IDEA提示Unable to resolve table ‘表名‘

    一 说明 我几乎看了CSDN所有大神的解答 尝试之后都无效 通过自己研究 终于解决此问题 遂在此记录 二 我的解决方案 在正常使用IntelliJ IDEA连接到数据库后 SQL语句提示Unable to resolve table 表名
  • 两个数字相加的代码

    内容 include
  • mac os x 使用外接摄像头

    参考 http bbs feng com read htm tid 2745586 html http www jb51 net os MAC 470090 html 1 打开macbook 自带程序Photo Booth 2 在左上工具条
  • Python3 CGI 编程

    什么是 CGI CGI 目前由 NCSA 维护 NCSA 定义 CGI 如下 CGI Common Gateway Interface 通用网关接口 它是一段程序 运行在服务器上如 HTTP服务器 提供同客户端 HTML 页面的接口 网页浏
  • Mysql子查询和联合(UNION)查询详解

    原文 http www 111cn net database mysql 47438 htm 在mysql中UNION查询是可以联合多个表 union只是mysql中联合查询的一个小点了 下面我来给大家介绍各种mysql中联合查询的语句 大
  • PS对白色过曝的区域建立选区,可先调整图像亮度对比度

    PS对白色过曝的区域建立选区 因为白色过薄 看不清边缘 解决方案 调整亮度和对比度 1 再选择边缘 就很方便了
  • 全新iPhone首发,结果“华为发布会”冲上热搜第一

    就离谱 苹果发iPhone 15 结果发着发着 华为发布会 冲上了热搜第一 哪怕是iPhone 15全系告别11年闪电接口改用USB C 经典静音键从Pro系列消失 这些库克 违背祖宗的决定 都没抢到更多热度 网友们第一时间倒是吐槽吐出了花
  • 提示“Web打印服务CLodop未安装启动”的各种原因和解决方法

    旧版提示 CLodop云打印服务 localhost本地 未安装启动 新版提示 Web打印服务CLodop未安装启动 点击这里下载执行安装 若此前已安装过 可点这里直接再次启动 成功后请刷新本页面 可能原因及现象及解决方法 原因1 没安装
  • 解决Moment格式化时间出现时区差的问题

    Moment格式化时间默认格式为当地时区的时间 如果格式化的结果与当地时间有差值 一般原因是 要格式化的时间带有时间标志 如 UTC GMT等 经过Moment格式化后 会变成时间标志所表示的时区的时间 此时 只需要改变时间偏移量即可 使用
  • iOS音视频—FFmepg应用-Android平台使用(NDK项目)

    iOS音视频 目录 新建NDK项目 1 编译 so动态库 2 新建在Android平台下的NDK项目 Android本身不支持C C 开发 NDK底层开发 需要我们进行配置 NDK 在Android平台下Google提供的支持C C 开发的
  • 测试学Python白话版(一)

    前言 测试人员转开发 Python是一个特别好的入门级编程语言 Python学起来相对容易 能做的事情也比较多 有了一定的基础之后 再学习其他语言也更加轻松 网上关于Python的教程很对 如果有时间完全可以自学 因为好多测试人员的基础较差
  • CCF-CSP 26次 第三题【角色授权】

    计算机软件能力认证考试系统 20分 include
  • 深度学习6-高级强化学习库

    高级强化学习库 使用高级库的动机 不要从头开始重新实现一切 PTAN库以及最重要的部分 将通过代码示例进行说明 针对CartPole上的DQN 使用PTAN库来实现 可以考虑的其他RL库 为什么使用强化学习库 RL十分灵活 并且很多现实生活
  • 如何实现侧边栏高亮?

    大家好 我是IT修真院深圳分院第九期的学员徐炜 一枚正直纯洁善良的前端程序员 今天给大家带来的是如何实现侧边栏高亮 一 背景介绍 侧边栏高亮是指选择侧边栏菜单时有一个样式效果 当刷新页面的时候 这个效果还在 侧边栏高亮有很多种实现方法 根据
  • 有趣的数据结构算法7——双向循环链表的实例应用

    有趣的数据结构算法7 双向循环链表的实例应用 问题复述 解题思路 实现代码 GITHUB下载连接 问题复述 要求实现用户输入一个数字改变26个字母的排列顺序 正常情况下26个字母的排列顺序是A B C D E F G H I J K L M