2024.7.22 作业

1.将双向链表和循环链表自己实现一遍,至少要实现创建、增、删、改、查、销毁工作

循环链表

looplinklist.h
#ifndef LOOPLINKLIST_H
#define LOOPLINKLIST_H#include <myhead.h>typedef int datatype;typedef struct Node
{union {int len;datatype data;};struct Node *next;
}Node,*NodePtr;//创建循环链表
NodePtr list_create();//链表判空
int list_empty(NodePtr L);//链表申请空间封装节点
NodePtr apply_node(datatype e);//按位置进行查找
NodePtr list_search_pos(NodePtr L,int pos);//链表尾插
int list_insert_tail(NodePtr L,datatype e);//链表遍历
int list_show(NodePtr L);//链表头删
int list_delete_head(NodePtr L);//链表销毁
void list_destroy(NodePtr L);//约瑟夫环
void ysfh(NodePtr L,int m);#endif
 looplinklist.c
#include "looplinklist.h"//创建循环链表
NodePtr list_create()
{NodePtr L=(NodePtr)malloc(sizeof(Node));if( NULL==L ){printf("创建失败\n");return NULL;}L->len = 0;L->next = L;printf("创建成功\n");return L;
}//链表判空
int list_empty(NodePtr L)
{return L->next==L;
}//链表申请空间封装节点
NodePtr apply_node(datatype e)
{NodePtr p = (NodePtr)malloc(sizeof(Node));if( NULL==p ){printf("申请失败\n");return NULL;}p->data = e;p->next = NULL;return p;
}//按位置进行查找
NodePtr list_search_pos(NodePtr L,int pos)
{if( NULL==L || pos<0 || pos>L->len){printf("查找失败\n");return NULL;}NodePtr q = L;for(int i=1;i<=pos;i++){q=q->next;}return q;
}//链表尾插
int list_insert_tail(NodePtr L,datatype e)
{if( NULL==L ){printf("尾插失败\n");return -1;}NodePtr p = apply_node(e);if( NULL==p ){return -1;}NodePtr q = list_search_pos(L,L->len);p->next = q->next;q->next = p;L->len++;return 0;
}//链表遍历
int list_show(NodePtr L)
{if( NULL==L || list_empty(L) ){printf("遍历失败\n");return -1;}NodePtr q = L->next;while( q!=L ){printf("%d\t",q->data);q = q->next;}printf("\n");return 0;
}//链表头删
int list_delete_head(NodePtr L)
{if( NULL==L || list_empty(L) ){printf("头删失败\n");return -1;}NodePtr q = L->next;L->next = q->next;L->len--;free(q);q=NULL;return 0;
}//链表销毁
void list_destroy(NodePtr L)
{if( NULL==L ){printf("销毁失败\n");return ;}while( !list_empty(L) ){list_delete_head(L);}free(L);L=NULL;printf("销毁成功\n");return;
}

双向链表 

doublelinklist.h
#ifndef DOUBLELINKLIST_H
#define DOUBLELINKLIST_Htypedef char datatype;typedef struct Node
{union{int len;datatype data;}struct Node *prio;struct Node *next;
}Node,*NodePtr;//创建双向链表
NodePtr list_create();//链表判空
int list_empty(NodePtr L);//申请节点封装数据
NodePtr apply_node(datatype e);//链表头插
int list_insert_head(NodePtr L,datatype e);//链表遍历
int list_show(NodePtr L);//按位置查找返回节点
NodePtr list_search_pos(NodePtr L,int pos);//链表任意位置删除
int list_delete_pos(NodePtr L,int pos);//链表空间释放
void list_destroy(NodePtr L);#endif
doublelinklist.c
#include "doublelinklist.h"//创建双向链表
NodePtr list_create()
{NodePtr L = (NodePtr)malloc(sizeof(Node));if( NULL==L ){printf("创建失败\n");return NULL;}L->len = 0;L->prio = NULL;L->next = NULL;printf("创建成功\n");return L;
}//链表判空
int list_empty(NodePtr L)
{return L->next == NULL;
}//申请节点封装数据
NodePtr apply_node(datatype e)
{NodePtr p =(NodePtr)malloc(sizeof(Node));if( NULL==p ){printf("节点申请失败\n");return NULL;}p->data = e;p->prio = NULL;p->next =NULL;return
}//链表头插
int list_insert_head(NodePtr L,datatype e)
{if( NULL==L ){printf("头插失败\n");return -1;}NodePtr p = apply_node(e);if( NULL==p ){return -1;}if( list_empty(L) ){p->prio = L;L-next = p;}else{p->prio = L;p->next = L->next;L->next->prio = p;L-next = p;}L->len++;return 0;
}//链表遍历
int list_show(NodePtr L)
{if( NULL==L || list_empty(L) ){printf("遍历失败\n");return -1;}printf("当前数据为:");NodePtr q = L->next;while( q ){printf("%c\t",q->data);q=q->next;}printf("\n");return 0;
}//按位置查找返回节点
NodePtr list_search_pos(NodePtr L,int pos)
{if( NULL==L || list_empty(L) || pos<0 || pos>L->len ){printf("查找失败\n");return NULL;}NodePtr q = L;for(int i=1;i<=pos;i++){q = q->next;}return q;
}//链表任意位置删除
int list_delete_pos(NodePtr L,int pos)
{if( NULL==L || list_empty(L) || pos<1 || pos>L->len ){printf("删除失败\n");return -1;}NodePtr q = list_search_pos(L,pos);if( q->next==NULL ){q->prio->next==NULL;}else{q->prio->next = q->next;q->next->prio = q->prio;}free(q);q=NULL;L->len--;return 0;
}//链表空间释放
void list_destroy(NodePtr L)
{if( NULL==L ){printf("释放失败\n");return ;}while( !list_empty(L) ){list_delete_pos(L,1);}free(L);L=NULL;printf("链表释放成功\n");return ;
}

 

2.使用循环链表完成约瑟夫环问题

//约瑟夫环
void ysfh(NodePtr L,int m)
{NodePtr p = L->next;NodePtr q = L;while( p->next!=p ){for(int i=1;i<m;i++){q = p;p = p->next;if(p==L){q=q->next;p=p->next;}}printf("%d\t",p->data);NodePtr a = p;           //标记q->next = p->next;   //p->next 孤立p=p->next;free(a);                   //释放a = NULL;}printf("\n最后剩下的节点: %d\n", p->data);  free(p); // 释放最后一节点  }

3.使用栈,完成进制转换

输入:一个整数,进制数

输出:该数的对应的进制数

void DC(StackPtr S,int m,int n)
{while(m/n!=0){S->top++;S->data[S->top]=m%n;m=m/n;}S->top++;S->data[S->top]=1;while(S->top!=-1){printf("%d",S->data[S->top]);S->top--;}printf("\n");
}

思维导图

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

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

相关文章

win10开启Linux子系统

打开win10开发人员模式&#xff0c;在设置–>更新和安全–>针对开发人员&#xff0c;中勾选开发人员模式。 然后在控制面板中勾选添加Linux子系统。依次进入控制面板–>程序–>启用或关闭windows功能&#xff0c;勾选适用于windows的linux的子系统&#xff0c;点击…

Mac清理垃圾的软件有哪些 怎么清理电脑上的缓存文件和垃圾清理

如果你发现你的Mac运行速度开始慢如蜗牛&#xff0c;或者硬盘空间快速减少&#xff0c;那么可能是时候使用一款好的清理软件来“洗个澡”了。市场上有许多优秀的Mac清理软件&#xff0c;包括一些出色的国产软件和国际知名软件。那么&#xff0c;mac电脑清理垃圾的软件有哪些&am…

Java---后端文件上传详解

袁门才俊志高远&#xff0c; 震古烁今意决然。 风采翩翩才情显&#xff0c; 雄姿英发立世间。 目录 一&#xff0c;简单案例演示 二&#xff0c;服务器本地存储 三&#xff0c;配置单个文件上传大小限制 一&#xff0c;简单案例演示 首先简单编写一个前端网页&#xff1a; &l…

知识图谱:知识图谱概述(一)

一、知识图谱简介 知识图谱&#xff0c;是结构化的语义知识库&#xff0c;主要用于描述现实世界中的实体及其相互关系&#xff0c;由节点和边组成。节点可以是实体&#xff0c;如汽车、街道等&#xff0c;或是抽象的概念&#xff0c;如AI、疾病等。边可以是实体的属性&#xff…

基于FPGA的以太网设计(2)----以太网的硬件架构(MAC+PHY)

1、概述 以太网的电路架构一般由MAC、PHY、变压器、RJ45和传输介质组成,示意图如下所示: 需要注意的是,上图是一个简化了的模型,它描述的是两台主机之间的直接连接,但在实际应用中基本都是多台主机构成的局域网,它们之间并不直接相连,而是通过交换机Switch来进行…

【PPT把当前页输出为图片】及【PPT导出图片模糊】的解决方法(sci论文图片清晰度)

【PPT把当前页输出为图片】及【PPT导出图片模糊】的解决方法 内容一&#xff1a;ppt把当前页输出为图片&#xff1a;内容二&#xff1a;ppt导出图片模糊的解决方法&#xff1a;方法&#xff1a;步骤1&#xff1a;打开注册表编辑器步骤2&#xff1a;修改注册表&#xff1a; 该文…

万字长文之分库分表里无分库分表键如何查询【后端面试题 | 中间件 | 数据库 | MySQL | 分库分表 | 其他查询】

在很多业务里&#xff0c;分库分表键都是根据主要查询筛选出来的&#xff0c;那么不怎么重要的查询怎么解决呢&#xff1f; 比如电商场景下&#xff0c;订单都是按照买家ID来分库分表的&#xff0c;那么商家该怎么查找订单呢&#xff1f;或是买家找客服&#xff0c;客服要找到对…

深入浅出WebRTC—ULPFEC

FEC 通过在发送端添加额外的冗余信息&#xff0c;使接收端即使在部分数据包丢失的情况下也能恢复原始数据&#xff0c;从而减轻网络丢包的影响。在 WebRTC 中&#xff0c;FEC 主要有两种实现方式&#xff1a;ULPFEC 和 FlexFEC&#xff0c;FlexFEC 是 ULPFEC 的扩展和升级&…

websocket实现进度条

websocket实现进度条 做一个简易的websocket实现进度条的练习&#xff0c;效果如下&#xff1a; 前端vue3 <template><el-progress type"circle" :percentage"this.progressValue" :status"this.perstatus" /><el-button cli…

docker tomcat 404

HTTP 404状态码表示“Not Found”&#xff0c;即服务器无法找到请求的页面。 当用户尝试访问一个不存在的网页时&#xff0c;服务器会返回这个状态码。这个状态码是HTTP协议的一部分&#xff0c;用于告知客户端&#xff08;通常是浏览器&#xff09;服务器无法完成请求。404状…

黑马JavaWeb企业级开发(知识清单)02——HTML实现标题:样式(CSS引入、CSS选择器、span标签)和超链接

文章目录 前言一、标题样式1&#xff1a;新闻标题颜色1. CSS三种引入方式2. 颜色表示3. javacode实现 二、标题样式2&#xff1a;发布时间颜色1. < span >标签2. CSS选择器1&#xff09;元素&#xff08;标签&#xff09;选择器&#xff08;优先级最低&#xff09;2&…

IC秋招RTL代码合集

一 全加器和半加器 全加器 module full_adder1(input Ai, Bi, Ci,output So, Co);assign So Ai ^ Bi ^ Ci ;assign Co (Ai & Bi) | (Ci & (Ai | Bi)); endmodule module full_adder1(input Ai, Bi, Cioutput So, Co);assign {Co, So} Ai Bi Ci ; endm…

wireshark过滤器,如何使用wireshark捕获指定域名的流量

过滤器比较高级&#xff0c;但是也很重要&#xff0c;我决定通过一个案例来学习过滤器的知识点。 比如&#xff0c;我现在访问 zhangdapeng.com 我希望能够捕获关于这个域名下的流量&#xff0c;该如何实现呢&#xff1f; 我选择了捕获以太网的流量&#xff0c;但是目前捕获到…

python-爬虫实例(4):获取b站的章若楠的视频

目录 前言 道路千万条&#xff0c;安全第一条 爬虫不谨慎&#xff0c;亲人两行泪 获取b站的章若楠的视频 一、话不多说&#xff0c;先上代码 二、爬虫四步走 1.UA伪装 2.获取url 3.发送请求 4.获取响应数据进行解析并保存 总结 前言 道路千万条&#xff0c;安全第一条 爬…

Java:114-Spring Boot的底层原理(上篇)

Spring Boot的底层原理 之前学习过了Spring Boot&#xff08;在88章博客&#xff09;&#xff0c;但是并没有很深入的了解&#xff0c;这里致力于在原来的基础上学习更多Spring Boot知识 回顾&#xff08;注意&#xff1a;只是回顾&#xff0c;所以更多细节在88章博客&#x…

【2】Spring Cloud 工程搭建

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;Spring Cloud实战&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 1.声明项目依赖和项目构建插件 2.完善子项目订单服务 2.1完善启动…

开源发票识别InvoiceNet项目Windows部署踩坑记(1)

今天安装在github上的InvoiceNet开源项目&#xff0c;准备对它进行测试&#xff0c;安装过程出现了一些问题&#xff0c;做个记录&#xff0c;给遇到兄弟爬坑。 第一个问题&#xff0c;conda的问题&#xff0c; 这是另外一个包管理器&#xff0c;不仅仅可以管理python的虚拟…

layui+thymeleaf+jquery实现多图片,多视频的上传、预览、放大、编辑功能

layuithymeleafjquery实现多图片&#xff0c;多视频的上传、预览、放大、编辑功能 html: <!--多图片上传--> <div class"layui-row layui-col-space10"><div class"layui-form-item"><div class"layui-form-item layui-form-te…

mybatis xml 文件中引用Java类的静态方法

MyBatis-Plus 支持在 XML 映射文件中使用 ${} 来直接嵌入字符串&#xff0c;以及使用 #{} 来引用传入参数。但是&#xff0c;$ 的使用需要小心&#xff0c;因为它会直接将参数内容嵌入到 SQL 语句中&#xff0c;这可能会导致 SQL 注入问题。 在 MyBatis-Plus 中&#xff0c;如果…

Android 防止重复点击

1.第一种方式&#xff1a; private static final int MIN_DELAY_TIME 2000; // 两次点击间隔不能少于2000ms private static long lastClickTime System.currentTimeMillis(); public static boolean isFastClick() { boolean flag true; long currentClickTime …