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.rhkb.cn/news/382166.html

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

相关文章

41 QOS技术(服务质量)

1 QOS 产生背景 对于网络业务&#xff0c;影响服务质量的因素包括传输的带宽、传送的时延、数据的丢包率等。网络资源总是有限的&#xff0c;只要存在抢夺网络资源的情况&#xff0c;就会出现服务质量的要求网络总带宽固定的情况下&#xff0c;如果某类业务占用的带宽越多&am…

2024导游资格考试,这些材料提前准备✅

2024年导游考试报名本月开始&#xff01; &#x1f499;大家提前准备好报名材料 1、个人近期白底1寸证件照。 2、身份证照片 3、学历照片 4、健康证明或健康承诺书 5、其他需要上传的材料 &#x1f499;照片文件不通过原因汇总&#xff0c;记得避开这些坑&#xff01; &#x1…

深入浅出理解 C 语言中的 qsort 函数

目录 引言 一、什么是qsort 二、函数原型 1.qsort函数 2.比较函数 三、qsort函数使用示例 1.使用qsort排序整形数据 2.使用qsort排序结构数据 总结 引言 在编程中&#xff0c;排序是一个常见且重要的操作。C 语言标准库提供了一系列排序函数&#xff0c;其中 qsort 函…

嵌入式C++、STM32、树莓派4B、OpenCV、TensorFlow/Keras深度学习:基于边缘计算的实时异常行为识别

1. 项目概述 随着物联网和人工智能技术的发展,智能家居安全系统越来越受到人们的关注。本项目旨在设计并实现一套基于边缘计算的智能家居安全系统,利用STM32微控制器和树莓派等边缘设备,实时分析摄像头数据,识别异常行为(如入侵、跌倒等),并及时发出警报,提高家庭安全性。 系…

HALSTM32 SPI/ABZ/PWM方式读取MT6816磁编码器数据

HALSTM32 SPI方式读取MT6816磁编码器数据 &#x1f4da;MT6816相关资料&#xff08;来自商家的相关资料&#xff09;&#xff1a; 资料&#xff1a;https://pan.baidu.com/s/1CAbdLBRi2dmL4D7cFve1XA?pwd8888 提取码&#xff1a;8888&#x1f4cd;驱动代码编写&#xff0c;可…

【HarmonyOS】HarmonyOS NEXT学习日记:六、渲染控制、样式结构重用

【HarmonyOS】HarmonyOS NEXT学习日记&#xff1a;六、渲染控制、样式&结构重用 渲染控制包含了条件渲染和循环渲染&#xff0c;所谓条件渲染&#xff0c;即更具状态不同&#xff0c;选择性的渲染不同的组件。 而循环渲染则是用于列表之内的、多个重复元素组成的结构中。 …

yolo5图片视频、摄像头推理demo

yolo5图片、视频推理demo 图片 import torch# 加载预训练模型 model torch.hub.load(./yolo5, custom, pathyolov5s.pt, sourcelocal)# 加载图片 img 1.jpg# 进行推理 results model(img)# 解析结果 detections results.xyxy[0].cpu().numpy() # [x1, y1, x2, y2, confid…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【29】Sentinel

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【29】Sentinel 简介熔断降级什么是熔断什么是降级相同点不同点 整合Sentinel自定义sentinel流控返回数据使用Sentinel来保护feign远程调用自定义资源给网关整合Sentinel参考 简介 熔断降…

C++的UI框架和开源项目介绍

文章目录 1.QT2.wxWidgets3.Dear ImGui 1.QT QT的开源项目&#xff1a;QGIS&#xff08;地理信息系统&#xff09; https://github.com/qgis/QGIS?tabreadme-ov-file 2.wxWidgets wxWidgets的开源项目&#xff1a;filezilla https://svn.filezilla-project.org/svn/ wxWidg…

【复习】软件工程

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 典型表现&#xff1a; 开发成本和进度的估计常常很不准确 用户对已完成的软件系统不满意&#xff0c;闭门造车 软件质量&#xff08;quality&#xff09;不可靠 软件常常是不可维护的 软件产品供不应…

二次元手游《交错战线》游戏拆解

交错战线游戏拆解案 游戏亮点即核心趣味 一、关键词&#xff1a; 回合制游戏、二次元、机甲、横板、剧情、养成、异星探索。 二、游戏亮点&#xff1a; 符合目标群体审美的原画。 三、核心趣味&#xff1a; 抽卡、肝或者氪金解锁新皮肤。 核心玩法及系统规则 核心玩法&…

el-menu弹出菜单样式不生效

1. 使用 ruoyi 项目时出现的问题。 <template><el-menu:default-active"activeMenu":collapse"false":unique-opened"true"class"container":collapse-transition"true"mode"horizontal"><sideba…

websocket状态机

websocket突破了HTTP协议单向性的缺陷&#xff0c;基于HTTP协议构建了双向通信的通道&#xff0c;使服务端可以主动推送数据到前端&#xff0c;解决了前端不断轮询后台才能获取后端数据的问题&#xff0c;所以在小程序和H5应用中被广泛使用。本文主要集合报文分析对于websocket…

linux、windows、macos清空本地DNS缓存

文章目录 Linux&#xff1a;Windows&#xff1a;macOS&#xff1a; Linux&#xff1a; 对于使用systemd的操作系统&#xff08;如CentOS 7、Ubuntu 16.04&#xff09;&#xff0c;可以使用以下命令重启systemd-resolved服务来清除缓存&#xff1a; sudo systemctl restart sys…

高精度-----乘法

找规律&#xff0c;对于第i为有贡献的东西就是a&#xff0c;b下标和为i的数字的乘积。主要是得去模拟。 #include <bits/stdc.h>using namespace std; typedef long long ll; typedef double db; typedef long double ldb; typedef pair<int, int> pii; typedef p…

【线性代数】矩阵变换

一些特殊的矩阵 一&#xff0c;对角矩阵 1&#xff0c;什么是对角矩阵 表示将矩阵进行伸缩&#xff08;反射&#xff09;变换&#xff0c;仅沿坐标轴方向伸缩&#xff08;反射&#xff09;变换。 2&#xff0c;对角矩阵可分解为多个F1矩阵&#xff0c;如下&#xff1a; 二&a…

【Docker】Docker Desktop - WSL update failed

问题描述 Windows上安装完成docker desktop之后&#xff0c;第一次启动失败&#xff0c;提示&#xff1a;WSL update failed 解决方案 打开Windows PowerShell 手动执行&#xff1a; wsl --set-default-version 2 wsl --update

CentOS 7 yum官方源失效

问题 2024年7月&#xff0c;官方对centos 7停止了维护&#xff0c;yum的源网址mirror.centos.org也已经无法访问。 在此情况下&#xff0c;无法正常使用yum进行安装和更新工具。 在尝试了更换阿里源之后&#xff0c;仍然有部分工具库无法访问。 通用解决方案 1. 打开/etc/y…

如何创建线程池?

//使用Executors工具类 ExecutorService poll1 Executors.newCachedThreadPool();//创建无上限线程池&#xff0c;默认上限是INTEGER.MAX ExecutorService poll2 Executors.newFixedThreadPool(3);//创建指定上限的线程池 ​ //自定义创建 ThreadPoolExecutor threadPoolExec…

实战项目:仿muduo库实现并发服务器

目录 项目初始与项目演示HTTP服务器基础认识Reactor模式基础认识单Reactor单线程模式认识单Reactor多线程模式认识多Reactor多线程模式认识 目标定位总体大模块划分server模块的管理思想Buffer子模块Socket子模块Channel子模块Connection子模块Acceptor子模块TimerQueue子模块P…