实现双向循环链表的 创建、判空、尾插、遍历、尾删、销毁

#include "link.h"//create DoubleLink head node
DoubleLink_p DoubleLink_create()
{DoubleLink_p H = (DoubleLink_p)malloc(sizeof(DoubleLink));if(NULL == H){printf("失败");return NULL;}H -> len = 0;H -> next = H;H -> prior = H;printf("申请成功\n");return H;
}//创建数据结点
DoubleLink_p DoubleLink_node()
{DoubleLink_p p = (DoubleLink_p)malloc(sizeof(DoubleLink));if(NULL == p){printf("失败");return NULL;}printf("请输入数据结点存储的值:");scanf("%d", &p -> data);p -> next = NULL;p -> prior = NULL;return p;
}//尾插
void tail_add(DoubleLink_p H)
{//找到尾节点DoubleLink_p q = H;for(int i = 0; i < H -> len; i++)q = q -> next;//创建结点DoubleLink_p p = DoubleLink_node();//将结点链接到尾部if(H -> next == H){p -> next = H;p -> prior = H;H -> next = p;H -> prior = p; }else{p -> next = q -> next;p -> prior = q;q -> next -> prior = p;q -> next = p; }H -> len++;
}//尾删
void tail_delete(DoubleLink_p H)
{if(empty(H)){printf("空");return;}//找到最后一个数据的地址DoubleLink_p q = H;for(int i = 0; i < H -> len; i++)q = q -> next;//删除节点H -> prior = q -> prior;q -> prior -> next = q -> next;free(q);q = NULL;H -> len--;
}//销毁链表
void DoubleLink_delete(DoubleLink_p H)
{while(H -> next != H)tail_delete(H);free(H);H = NULL;printf("销毁成功\n");
}
//回显数据
void DoubleLink_show(DoubleLink_p H)
{if(empty(H)){printf("空\n");return ;}DoubleLink_p p = H -> next;printf("————");for(int i = 0; i < H -> len; i++){printf("%d",p -> data);p = p -> next;}printf("————");putchar(10);
}//判空
int empty(DoubleLink_p H)
{return H -> next == H;
}
#include "link.h"int main()
{DoubleLink_p H = DoubleLink_create();if(NULL == H)printf("申请失败");else{int i;do{printf("1.回显\t2.尾插\t3.尾删\t0.退出\n");printf("请输入指令选项:");scanf("%d", &i);switch(i){case 1: DoubleLink_show(H);break;case 2: tail_add(H);break;case 3: tail_delete(H);break;case 0: DoubleLink_delete(H);H = NULL;printf("已退出\n");break;}}while(0 != i);}return 0;
}
#ifndef __link_H__
#define __link_H__#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef int datatype;
typedef struct node
{union{datatype data;int len;};struct node *prior;struct node *next;
}DoubleLink, *DoubleLink_p;//创建头结点和数据节点
DoubleLink_p DoubleLink_create();
DoubleLink_p DoubleLink_node();//节点功能函数
void tail_add(DoubleLink_p H);
void tail_delete(DoubleLink_p H);
void DoubleLink_show(DoubleLink_p H);
int empty(DoubleLink_p H);
void DoubleLink_delete(DoubleLink_p H);
#endif

实现效果

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

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

相关文章

044基于SSM+Jsp的个性化影片推荐系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

安装nodejs | npm报错

nodejs安装步骤: 官网&#xff1a;https://nodejs.org/en/ 在官网下载nodejs: 双击下载下来的msi安装包&#xff0c;一直点next&#xff0c;我选的安装目录是默认的: 测试是否安装成功&#xff1a; 输入cmd打开命令提示符&#xff0c;输入node -v可以看到版本&#xff0c;说…

vue项目中使用svg图标/插件svg-sprite-loader

项目中为了体验好、性能优、资源丰富等原因经常会用svg这种矢量图&#xff0c;但是svg不能直接像image标签一样直接使用&#xff0c;这就需要前端的同学自己处理了。 svg有以下优点&#xff1a; svg放大不失真,png&#xff0c;jpg会出现失真现象 svg的体积非常小&#xff0c;对…

JVM原理(二四):JVM虚拟机锁优化

高效并发是从JDK 5升级到JDK 6后一项重要的改进项&#xff0c;HotSpot虛 拟机开发团队在这个版本上花费了大量的资源去实现各种锁优化技术&#xff0c;如适应性自旋( Adaptive Spinning)、锁消除( Lock Elimination)、锁膨胀(Lock Coarsening)、轻量级锁(Lightweight Locking)、…

代码随想录打卡第十八天

代码随想录–二叉树部分 day 17 休息日 day 18 二叉树第五天 文章目录 代码随想录--二叉树部分一、力扣654--最大二叉树二、力扣617--合并二叉树三、力扣700--二乘树中的搜素四、力扣98--验证二叉搜索树 一、力扣654–最大二叉树 代码随想录题目链接&#xff1a;代码随想录 给…

初识CPlusPlus

前言 也是好久没写博客了&#xff0c;那些天也没闲着&#xff0c;去练题去了。实际上练题也可以写练题的博客&#xff0c;但是觉得太简单了些&#xff0c;于是就没有继续写下去。如今又回来写博客&#xff0c;是因为有整理了新的知识C。内容不算多&#xff0c;大多数都是书本上…

【C++ 】中类的成员函数和析构函数的作用

在C中&#xff0c;类的成员函数和析构函数各自扮演着不同的角色&#xff0c;它们对于类的对象的生命周期管理和行为实现至关重要。 成员函数 成员函数是类的一部分&#xff0c;它们允许你定义类的行为&#xff0c;包括但不限于&#xff1a; 操作数据成员&#xff1a;成员函数…

Spring-事务(三)

作者&#xff1a;月下山川 公众号&#xff1a;月下山川 1、什么是事务 数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列&#xff0c;这些操作要么全部执行,要么全部不执行&#xff0c;是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的…

证件照片换背景底色 免费 证件照片制作软件免费下载 证件照换衣服软件免费有哪些好用

证件照是我们身份认证的重要凭证&#xff0c;其质量和专业性都很重要。然而&#xff0c;很多时候&#xff0c;由于各种原因&#xff0c;我们可能无法在拍摄证件照时穿上合适的服装&#xff0c;这就给证件照的质量和形象带来了一定的影响。幸运的是&#xff0c;现在市面上出现了…

【保姆级介绍下C语言中的运算符的优先级】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 🧇C语言中的运算符的优先级 🧇C语言中的运算符的优先级决定了表达…

DOM(文档对象模型)生命周期事件

前言 DOM 生命周期事件涉及到从创建、更新到销毁 DOM 元素的不同阶段。 ● 我们来看下当HTML文档加载完再执行JavaScript代码 document.addEventListener(DOMContentLoaded, function (e) {console.log(HTML parsed adn DOM tree built!, e); })● 除此之外&#xff0c;浏览…

Codeforces Round 925 (Div. 3) D-F

Divisible Pairs 你有两个整数 x , y x,y x,y 和一个长为 n n n 的数组 a a a。 你需要求出有多少个正整数对 ( i , j ) (i,j) (i,j) 满足&#xff1a; 1 ≤ i < j ≤ n 1 \le i < j \le n 1≤i<j≤n a i a j a_i a_j ai​aj​ 可被 x x x 整除 a i − a j a…

使用ADB命令控制logcat日志本地存储功能

使用ADB命令控制logcat日志本地存储功能 1. 需求背景 在 Android 系统上进行开发调试时&#xff0c;为了分析 bug&#xff0c;很多场景需要抓取开机log。 使用GUI界面的工程模式/开发者选项可以打开 logcat 日志的本地存储功能&#xff0c;从而可以很方便的抓取完整的开机日…

单链表(C语言详细版)

1. 链表的概念及结构 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表的结构跟火车车厢相似&#xff0c;淡季时车次的车厢会相应减少&#xff0c;旺季时车次的车厢会额外增加几节。…

3.结果映射ResultMap(关联association+collection)

结果映射ResultMap 一.结果映射 是 MyBatis 中最重要最强大的元素,简化代码,允许JDBC不支持的一些操作 1.常用属性 constructor - 用于在实例化类时&#xff0c;注入结果到构造方法中 &#xff08;一般不用&#xff09; idArg - ID 参数&#xff1b;标记出作为 ID 的结果可…

Day65 代码随想录打卡|回溯算法篇---组合总和II

题目&#xff08;leecode T40&#xff09;&#xff1a; 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含…

Linux文件编程(打开/创建写入读取移动光标)

目录 一、如何在Linux下做开发 1.vi编辑器 2.gcc编译工具 3.常用指令 二、文件打开及创建 三、写入文件 四、读取文件 五、文件“光标”位置 一、如何在Linux下做开发 所谓文件编程&#xff0c;就是对文件进行操作&#xff0c;Linux的文件和Windows系统的文件大差不差…

Python函数 之 函数基础

print() 在控制台输出 input() 获取控制台输⼊的内容 type() 获取变量的数据类型 len() 获取容器的⻓度 (元素的个数) range() ⽣成⼀个序列[0, n) 以上都是我们学过的函数&#xff0c;函数可以实现⼀个特定的功能。我们将学习⾃⼰如何定义函数, 实现特定的功能。 1.函数是什么…

剑指offer,打印从1到最大的n位数

这道题重点考察的就是我们的大数打印&#xff0c;因为如果按照普通的整形去循环打印的话&#xff0c;碰见n10的情况下就会超出整形的范围了&#xff0c;所以我们使用字符串进行打印&#xff0c;确切的说是使用字符进行打印&#xff0c;代码如下所示&#xff1a; public static…

EtherCAT主站IGH-- 11 -- IGH之fmmu_config.h/c文件解析

EtherCAT主站IGH-- 11 -- IGH之fmmu_config.h/c文件解析 0 预览一 该文件功能`fmmu_config.c` 文件功能函数预览二 函数功能介绍1. `ec_fmmu_config_init`2. `ec_fmmu_set_domain_offset_size`3. `ec_fmmu_config_page`示例用法示例详细说明三 h文件翻译四 c文件翻译该文档修改…