【数据结构】双向链表

一、main函数

#include <stdio.h>
#include "./3.doublelinklist.h"
int main(int argc, const char *argv[])
{doublelinklist* head = creatr_doublelinklist();insertHead_doublelinklist(head,999);insertHead_doublelinklist(head,888);insertHead_doublelinklist(head,777);insertHead_doublelinklist(head,666);insertHead_doublelinklist(head,555);insertHead_doublelinklist(head,444);showdoublelinklist(head);insertEnd_doublelinklist(head,123);insertEnd_doublelinklist(head,456);insertEnd_doublelinklist(head,789);showdoublelinklist(head);delHead_doublelinklist(head);showdoublelinklist(head);delEnd_doublelinklist(head);showdoublelinklist(head);insertByindex_doublelinklist(head,3,111);insertByindex_doublelinklist(head,20,99);showdoublelinklist(head);delByindex_doublelinklist(head,2);delByindex_doublelinklist(head,20);showdoublelinklist(head);return 0;
}

二、功能函数

#include <stdio.h>
#include <stdlib.h>
#include "./3.doublelinklist.h"
doublelinklist* creatr_doublelinklist()
{doublelinklist*head = (doublelinklist*)malloc(sizeof(doublelinklist));if(NULL == head){printf("结点创建失败,双向链表申请失败\n");return NULL;}head->next = NULL;head->prev = NULL;head->text.len=0;return head;
}//判空
int isEmpty_doublelinklist(doublelinklist*head)
{return head->next == NULL?1:0;
}//遍历
void showdoublelinklist(doublelinklist*head)
{                                                                                                doublelinklist*p = head;while(p->next != NULL ){p=p->next;printf("%d ",p->text.data);}printf("\n");return ;
}//头插法
void insertHead_doublelinklist(doublelinklist*head,dataType num)
{doublelinklist* temp = (doublelinklist*)malloc(sizeof(doublelinklist));if(NULL == temp)                                                                                             {printf("结点创建失败,头插失败\n");return ;}temp->text.data = num;temp->next = NULL;temp->prev = NULL;if(isEmpty_doublelinklist(head) == 1){temp->next = head->next;head->next= temp;temp->prev = head;return ;}else{temp->next = head->next;head->next = temp;temp->next->prev = temp;temp->prev = head;}head->text.len++;return ;
}//尾插法
void insertEnd_doublelinklist(doublelinklist*head,dataType num)
{doublelinklist* temp = (doublelinklist*)malloc(sizeof(doublelinklist));if(NULL == temp){printf("结点创建失败,尾插失败\n");return ;}temp->text.data = num;temp->next = NULL;                                                                        temp->prev = NULL;doublelinklist* p =head;while(p->next != NULL){p=p->next;}temp->next = p->next;p->next = temp;temp->prev = p;head->text.len++;return ;}//头删法void delHead_doublelinklist(doublelinklist*head){if(isEmpty_doublelinklist(head)){printf("双向链表为空,头删失败\n");return;}doublelinklist* temp = head->next;if(NULL == temp->next){head->next= NULL;}else{head->next=temp->next;temp->next->prev=head;}free(temp);head->text.len--;return;}//尾删法void delEnd_doublelinklist(doublelinklist*head){if(isEmpty_doublelinklist(head)){printf("双向链表为空,尾删失败\n");return;}doublelinklist*temp;doublelinklist*p=head;while(p->next->next != NULL){p=p->next;}temp=p->next;p->next=NULL;free(temp);head->text.len--;return;}//按位置插入
void insertByindex_doublelinklist(doublelinklist*head,int index,dataType num)
{doublelinklist* temp = (doublelinklist*)malloc(sizeof(doublelinklist));if(NULL == temp){printf("结点创建失败,插入失败\n");return ;}temp->text.data = num;temp->next = NULL;temp->prev = NULL;if(index<1 || index >head->text.len+1){printf("插入位置非法\n");return ;}                                                                                                    doublelinklist* p=head;int i;for(i=1;i<index;i++){p=p->next;}if(p->next != NULL){temp->next = p->next;p->next = temp;temp->next->prev = temp;temp->prev = p;}else{temp->next = NULL;p->next = temp;temp->prev = p;}head->text.len++;return ;
}//按位置删除
void delByindex_doublelinklist(doublelinklist*head,int index)
{if(isEmpty_doublelinklist(head)){printf("双向链表为空,删除失败\n");return;}if(index<1 || index >head->text.len+1){printf("选择位置非法\n");return ;}doublelinklist*p=head;for(int i=1;i<index;i++){p=p->next;}doublelinklist*temp = p->next;p->next = temp->next;if(NULL != temp->next){temp->next->prev = p;}free(temp);head->text.len--;return;}

三、头文件

#ifndef __doublelink_H__                                   
#define __doublelink_H__typedef int dataType;union msg{dataType data;int len;
};typedef struct node{union msg text;struct node* next;struct node* prev;
}doublelinklist;doublelinklist* creatr_doublelinklist();
void showdoublelinklist(doublelinklist*head);
void insertHead_doublelinklist(doublelinklist*head,dataType num);
void insertEnd_doublelinklist(doublelinklist*head,dataType num);
void insertByindex_doublelinklist(doublelinklist*head,int index,dataType num);
void delHead_doublelinklist(doublelinklist*head);
void delEnd_doublelinklist(doublelinklist*head);
void delByindex_doublelinklist(doublelinklist*head,int index);#endif                                                                                           

四、运行结果

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

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

相关文章

家装服务管理:Java技术的创新应用

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

SQL注入之oracle注入+SQLbypass+sqlmap实战

学习路还很长&#xff0c;切莫轻言放弃&#xff01; 目录 Oracle数据库介绍 Oracle数据库和MySQL数据库的差别 Oracle数据库注入 SQLbypass姿势 sqlmap工具实战(kali自带) Oracle数据库介绍 Oracle数据库是全球最知名的关系型数据库管理系统&#xff08;RDBMS&#xff09…

29-资源清单的管理工具-helm

一、helm的介绍 1&#xff0c;helm的价值概述 如下图所示&#xff0c;在一个企业中&#xff0c;可能存在多个不同的应用业务&#xff0c;每个业务可能包含多至十几、甚至几十个资源清单&#xff0c;那么对于“运维”和“研发”人员来讲&#xff0c;这么多的资源清单&#xff0…

说说UE5中的几种字符串类

在Unreal Engine 5 (UE5) 的C中&#xff0c;与字符串相关的类主要包括&#xff1a; FString&#xff1a; Unreal Engine中用于处理字符串的主要类&#xff0c;提供了丰富的字符串操作方法和功能。 FText&#xff1a; 用于表示本地化文本的类&#xff0c;可以包含多种语言的文本…

分布式知识整理

分布式锁 以商场系统超卖现象举例 超卖现象一 现象&#xff1a; 商品卖出数量超出了库存数量。 产生原因&#xff1a; 扣减库存的动作在程序中进行&#xff0c;在程序中计算剩余库存&#xff0c;在并发场景下&#xff0c;导致库存计算错误。 代码复现 es.shutdown(); cycl…

Nest.js权限管理系统开发(五)返回格式化

返回格式化拦截器 在上一篇《Nest.js权限管理系统开发&#xff08;四&#xff09;Swagger API接入》中&#xff0c;我们在base.controller.ts中创建了多个接口&#xff0c;每个接口都有不同的返回类型。现实中我们往往需要统一返回数据的格式&#xff0c;例如&#xff1a; {&…

【uni-app】路由

&#xff08;1&#xff09;路由配置 uni-app 页面路由全部交给框架统一管理&#xff0c;开发者需要在pages.json里配置每个路由页面的路径及页面样式&#xff08;类似小程序在 app.json 中配置页面路由&#xff09;。 "pages": [{"path": "pages/ind…

蓝桥杯倒计时47天!DFS基础——图的遍历

倒计时47天&#xff01; 深度优先搜索——DFS 温馨提示&#xff1a;学习dfs之前最好先了解一下递归的思想。 DFS基础——图的遍历 仙境诅咒 问题描述 在一片神秘的仙境中&#xff0c;有N位修仙者&#xff0c;他们各自在仙境中独立修炼&#xff0c;拥有自己独特的修炼之道…

websocket在django中的运用

14-2 聊天室实现思路&#xff1a;轮训、长轮训、websocket_哔哩哔哩_bilibili 参考大佬的B站学习笔记 https://www.cnblogs.com/wupeiqi/p/6558766.html 参考博客 https://www.cnblogs.com/wupeiqi/articles/9593858.html 参考博客 http: 是短连接&#xff0c;无状态的&…

探索网络通信的遗产:AppleTalk Data Stream Protocol (ADSP) 的全面解析

ADSP简介 AppleTalk Data Stream Protocol (ADSP) 是AppleTalk网络协议套件的一部分&#xff0c;设计用于在AppleTalk网络中提供端到端的可靠数据流服务。在1980年代和1990年代&#xff0c;AppleTalk是Apple计算机用于局域网通信的主要网络技术。ADSP提供了一种类似于现代TCP协…

conda 导出/导出配置好的虚拟环境

一. 导出环境配置&#xff08;yml文件&#xff09; 1. 在主目录下激活虚拟环境&#xff08;UE4是我的虚拟环境名称&#xff0c;请根据你自己的名称进行修改&#xff09; conda activate UE4 2. 运行此代码 conda env export > environment.yml 二. 导入环境配置&#xf…

创建第一个React项目

React脚手架 npx create-react-app react-demonpx是直接从互联网网上拉最新的脚手架进行创建react 运行React项目 npm start若想找到Webpack配置文件 npm ejectReact的基本使用 基本步骤 导入react和react-dom vue 创建react元素 渲染react元素到页面中导入 import React…

python统计分析——多解释变量的方差分析

参考资料&#xff1a;用python动手学统计学 1、导入库 # 导入库 # 用于数值计算的库 import numpy as np import pandas as pd import scipy as sp from scipy import stats # 用于绘图的库 from matplotlib import pyplot as plt import seaborn as sns sns.set() # 用于估计…

Android 10 音量UI更新解析

1 VolumeUI 的启动 由于VolumeUI 是继承 SystemUI 的&#xff0c;所以它的启动方式和 SystemUI 的启动方式一样。 直接看 VolumeUI 的start()方法 frameworks/base/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java Override public void start() {boolean …

Linux基础命令—进程管理

基础知识 linux进程管理 什么是进程 开发写代码->代码运行起来->进程 运行起来的程序叫做进程程序与进程区别 1.程序是一个静态的概念,主要是指令集和数据的结合,可以长期存放在操作系统中 2.进程是一个动态的概念,主要是程序的运行状态,进程存在生命周期,生命周期结…

YY调音台:直播主播的体验

我是直播平台的主播&#xff0c;日常工作就是在直播间里打游戏、唱歌、聊天之类的。刚开始的时候我的直播工具只有一台电脑&#xff0c;收音也是用的我自己常用的耳机&#xff0c;设备比较简陋&#xff0c;直播间的用户留存率也不高。但是我相信天道酬勤&#xff0c;每天晚上坚…

javaScript数组去重的几种实现方式——适用非引用数据去重

最传统的使用循环遍历 //最传统的使用循环遍历 function getUnique(arr) {let newArr [];for (let i 0; i < arr.length; i) {for (let j i 1; j < arr.length; j) {if (arr[i] arr[j]) {i; //相同丢掉前面的元素}}newArr.push(arr[i]);}return newArr; } 利用Set实…

Seata分布式事务实战XATCC模式

目录 XA模式 XA 模式的使用 Spring Cloud Alibaba整合Seata XA TCC模式 TCC模式接口改造 TCC如何控制异常 Spring Cloud Alibaba整合Seata TCC XA模式 整体机制 在 Seata 定义的分布式事务框架内&#xff0c;利用事务资源&#xff08;数据库、消息服务等&#xff09;对…

【Python从入门到进阶】49、当当网Scrapy项目实战(二)

接上篇《48、当当网Scrapy项目实战&#xff08;一&#xff09;》 上一篇我们正式开启了一个Scrapy爬虫项目的实战&#xff0c;对当当网进行剖析和抓取。本篇我们继续编写该当当网的项目&#xff0c;讲解刚刚编写的Spider与item之间的关系&#xff0c;以及如何使用item&#xff…

【python】0、超详细介绍:json、http

文章目录 一、json二、http2.1 json 读取 request 序列化 三、基本类型3.1 decimal 四、图像4.1 颜色格式转换 一、json import json f open(data.json) # open json file data json.load(f) # 读出 json object for i in data[emp_details]: # 取出一级属性 emp_details, …