数据结构2月21日

双向链表:

func函数:

#include <stdio.h>                                                                                                                   
#include <stdlib.h>                                                                                                                  
#include "./double.h"                                                                                                                //创建一个空的双向链表                                                                                                               doubleLinkList* create_doubleLinkList()                                                                                              
{                                                                                                                                    doubleLinkList* head = (doubleLinkList*)malloc(sizeof(doubleLinkList));                                                          if(NULL==head)                                                                                                                   {                                                                                                                                printf("创建头结点失败,双向链表创建失败\n");                                                                                return NULL;                                                                                                                 }                                                                                                                                head->text.len=0;                                                                                                                head->next = NULL;                                                                                                               head->prev = NULL;                                                                                                               return head;                                                                                                                     
}                                                                                                                                    //头插法                                                                                                                             
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(head->next==NULL)                                                                                                             {                                                                                                                                temp->next = head->next;                                                                                                     head->next = temp;                                                                                                           temp->prev = head;                                                                                                           }                                                                                                                                else                                                                                                                             {                                                                                                                                temp->next = head->next;                                                                                                     head->next = temp;                                                                                                           temp->next->prev = temp;                                                                                                     temp->prev = head;                                                                                                           }                                                                                                                                //更新头结点中链表的长度                                                                                                         head->text.len++;                                                                                                                return;                                                                                                                          
}                                                                                                                                    //遍历                                                                                                                               
void show_doubleLinkLit(doubleLinkList* head)                                                                                        
{                                                                                                                                    doubleLinkList* p=head;                                                                                                          while(p->next != NULL)                                                                                                           {                                                                                                                                p=p->next;                                                                                                                   printf("%d ",p->text.data);                                                                                                  }                                                                                                                                printf("\n");                                                                                                                    return;                                                                                                                          
}                                                                                                                                    //判断链表是否为空                                                                                                                   
int isEmpty_doubleLinkList(doubleLinkList* head)                                                                                     
{                                                                                                                                    return head->next == NULL? 1:0;                                                                                                  
}                                                                                                                                    //尾插法                                                                                                                             
void insertTail_doubleLinkList(doubleLinkList* head,int 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;                                                                                                                   }                                                                                                                                
//该循环结束后,p指向最后一个结点                                                                                                    temp->next=NULL;                                                                                                                 p->next=temp;                                                                                                                    temp->prev=p;                                                                                                                    head->text.len++;                                                                                                                return;                                                                                                                          }                                                                                                                                    //按位置插入                                                                                                                         
void insertbyPos_doubleLinkList(doubleLinkList* head,int num,int pos)                                                                
{                                                                                                                                    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;                                                                                                        for(int i=0;i<pos-1;i++)                                                                                                         {                                                                                                                                p=p->next;                                                                                                                   }                                                                                                                                //在中间和在边上是两种插入方法                                                                                                   if(p->next!=NULL)                                                                                                                {                                                                                                                                temp->next=p->next;                                                                                                          p->next=temp;                                                                                                                p->next->prev=temp;                                                                                                          temp->prev=p;                                                                                                                }                                                                                                                                else                                                                                                                             {                                                                                                                                temp->next=NULL;                                                                                                             p->next=temp;                                                                                                                temp->prev=p;                                                                                                                }                                                                                                                                head->text.len++;                                                                                                                return;                                                                                                                          
}                                                                                                                                    //头删法                                                                                                                             
void deletebyhead_doubleLinkList(doubleLinkList* head)                                                                               
{                                                                                                                                    if(isEmpty_doubleLinkList(head)==1)                                                                                              {                                                                                                                                printf("链表为空,不能删除\n");                                                                                              return;                                                                                                                      }                                                                                                                                //删除有两种情况,一种只有两个,一种很多个                                                                                       doubleLinkList* p = head->next;                                                                                                  if(p->next!=NULL)                                                                                                                {                                                                                                                                head->next=p->next;                                                                                                          p->next->prev=head;                                                                                                          }                                                                                                                                else                                                                                                                             {                                                                                                                                head->next=p->next;                                                                                                          }                                                                                                                                free(p);                                                                                                                         return;                                                                                                                          
}                                                                                                                                    //尾删法                                                                                                                             
void deletebyTail_doubleLinkList(doubleLinkList* head)                                                                               
{                                                                                                                                    if(isEmpty_doubleLinkList(head)==1)                                                                                              {                                                                                                                                printf("链表为空,不能删除\n");                                                                                              return;                                                                                                                      }                                                                                                                                //循环找到尾结点                                                                                                                 doubleLinkList* p = head->next;                                                                                                  while(p->next!=NULL)//该循环结束后,p指向最后一个结点                                                                            {                                                                                                                                p=p->next;                                                                                                                   }                                                                                                                                p->prev->next=NULL;                                                                                                              free(p);                                                                                                                         
}                                                                                                                                    //按位置删除                                                                                                                         
void deletebyPos_doubleLinkList(doubleLinkList* head,int pos)                                                                        
{                                                                                                                                    if(isEmpty_doubleLinkList(head)==1)                                                                                              {                                                                                                                                printf("链表为空,不能删除\n");                                                                                              return;                                                                                                                      }                                                                                                                                doubleLinkList* p=head;                                                                                                          for(int i =0;i<pos;i++)                                                                                                          {                                                                                                                                p=p->next;                                                                                                                   }                                                                                                                                if(p->next!=NULL)                                                                                                                {                                                                                                                                p->prev->next=p->next;                                                                                                       p->next->prev=p->prev;                                                                                                       }                                                                                                                                else                                                                                                                             {                                                                                                                                p->prev->next=NULL;                                                                                                          }                                                                                                                                free(p);                                                                                                                         return;                                                                                                                          
}                                                                                                                                    

main.c函数:

#include <stdio.h>
#include "./double.h"int main(int argc, const char *argv[])
{doubleLinkList* head = create_doubleLinkList();insertHead_doubleLinkList(head,100);insertHead_doubleLinkList(head,100);insertHead_doubleLinkList(head,100);insertHead_doubleLinkList(head,100);show_doubleLinkLit(head);insertTail_doubleLinkList(head,200);insertTail_doubleLinkList(head,300);insertTail_doubleLinkList(head,400);insertTail_doubleLinkList(head,500);show_doubleLinkLit(head);insertbyPos_doubleLinkList(head,666,2);insertbyPos_doubleLinkList(head,666,6);show_doubleLinkLit(head);deletebyhead_doubleLinkList(head);deletebyhead_doubleLinkList(head);deletebyhead_doubleLinkList(head);show_doubleLinkLit(head);deletebyTail_doubleLinkList(head);deletebyTail_doubleLinkList(head);show_doubleLinkLit(head);deletebyPos_doubleLinkList(head,2);deletebyPos_doubleLinkList(head,4);show_doubleLinkLit(head);return 0;                                          
}

.h函数:

 #ifndef DOUBLE_H_#define DOUBLE_H_typedef int dataType;union msg{   dataType data;int len;};typedef struct node{   union msg text;struct node* next;struct node* prev;}doubleLinkList;doubleLinkList* create_doubleLinkList();void insertHead_doubleLinkList(doubleLinkList* head,dataType num);void show_doubleLinkLit(doubleLinkList* head); void insertTail_doubleLinkList(doubleLinkList* head,int num);void insertbyPos_doubleLinkList(doubleLinkList* head,int num,int pos);void deletebyhead_doubleLinkList(doubleLinkList* head);void deletebyTail_doubleLinkList(doubleLinkList* head);void deletebyPos_doubleLinkList(doubleLinkList* head,int pos);          #endif

运行结果:

单向循环:

func.c:

#include <stdio.h>
#include <stdlib.h>
#include "./d221.h"
linkList* loop_LinkList()
{linkList* head=(linkList*)malloc(sizeof(linkList));if(head==NULL){printf("头结点创建失败\n");return NULL;}head->text.len=0;head->next=head;return head;                                                                                                                                                                                                                       
}//判断链表是否为空
int isEmpty_linkList(linkList* head)
{return head->next == head?1:0;
}
//遍历链表
void show_linkList(linkList* head)
{linkList* p = head;while(p->next != head){p=p->next;printf("%d ",p->text.data);}printf("\n");return;
}
//头插法
dataType insert_linkList(linkList* head,int num)
{linkList* temp = (linkList*)malloc(sizeof(linkList));if(temp==NULL){printf("结点创建失败\n");return -1;}temp->text.data=num;temp->next=NULL;temp->next=head->next;head->next=temp;head->text.len++;return 0;
}//尾插
void insertTail_linkList(linkList* head,int num)
{linkList* temp = (linkList*)malloc(sizeof(linkList));if(temp==NULL){printf("结点创建失败\n");return;}temp->text.data=num;temp->next=NULL;linkList* p = head;while(p->next != head){p=p->next;}temp->next=head;p->next=temp;head->text.len++;
}//头删
dataType deleteHead_linkList(linkList* head)
{//判断链表是否为空if(isEmpty_linkList(head)==1){printf("链表为空,无法删除\n");}linkList* temp = head->next;head->next = temp->next;dataType num = temp->text.data;free(temp);temp = NULL;head->text.len--;return num;
}//尾删
void deleteTail_linkList(linkList* head)
{//判断链表是否为空if(isEmpty_linkList(head)){printf("链表为空,无法删除\n");}linkList* temp = head;while(temp->next->next !=head){temp=temp->next;}free(temp->next);temp->next=head;head->text.len--;return ;
}//按位置插入 
void insertbyPos_linkList(linkList* head,int num,int pos)
{linkList* temp = (linkList*)malloc(sizeof(linkList));if(temp==NULL){printf("结点创建失败\n");return;}temp->text.data=num;temp->next=NULL;linkList* p =head;for(int i=0;i<pos-1;i++){if(p->next==NULL){p->next=temp;temp->next=head;}p=p->next;}temp->next=p->next;temp->text.data=num;p->next=temp;head->text.len++;return;
}//按位置删除
void deletebyPos_linkList(linkList* head,int pos)
{//判断链表是否为空if(isEmpty_linkList(head)){printf("链表为空,无法删除\n");}linkList* p = head;for(int i=0;i<pos-1;i++){if(p->next==head){p->next=head;}p=p->next;}linkList* q=p->next;p->next=q->next;q=NULL;free(q);head->text.len--;return ;
}

main.c:

#include <stdio.h>
#include "./d221.h"int main(int argc, const char *argv[])
{linkList* head =  loop_LinkList();insert_linkList(head,10);insert_linkList(head,20);insert_linkList(head,30);show_linkList(head);insertTail_linkList(head,3);insertTail_linkList(head,4);insertTail_linkList(head,5);insertTail_linkList(head,6);show_linkList(head);deleteHead_linkList(head);deleteHead_linkList(head);deleteHead_linkList(head);show_linkList(head);deleteTail_linkList(head);deleteTail_linkList(head);show_linkList(head);insertbyPos_linkList(head,66,1);insertbyPos_linkList(head,77,3);insertbyPos_linkList(head,88,4);show_linkList(head);deletebyPos_linkList(head,1);show_linkList(head);return 0;
}

.h函数:

#ifndef LINK_H_
#define LINK_H_
typedef int dataType;union msg{dataType data;int len;
};typedef struct node{union msg text;struct node* next;
}linkList;linkList* loop_LinkList();
dataType insert_linkList(linkList* head,int num);
void show_linkList(linkList* head);
void insertTail_linkList(linkList* head,int num);         
dataType deleteHead_linkList(linkList* head);
void deleteTail_linkList(linkList* head);
void insertbyPos_linkList(linkList* head,int num,int pos);
void deletebyPos_linkList(linkList* head,int pos);#endif

运行结果:

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

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

相关文章

【Flink精讲】Flink性能调优:内存调优

内存调优 内存模型 JVM 特定内存 JVM 本身使用的内存&#xff0c;包含 JVM 的 metaspace 和 over-head 1&#xff09; JVM metaspace&#xff1a; JVM 元空间 taskmanager.memory.jvm-metaspace.size&#xff0c;默认 256mb 2&#xff09; JVM over-head 执行开销&#xff1…

【web】云导航项目部署及环境搭建(复杂)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、项目介绍1.1项目环境架构LNMP1.2项目代码说明 二、项目环境搭建2.1 Nginx安装2.2 php安装2.3 nginx配置和php配置2.3.1 修改nginx文件2.3.2 修改vim /etc/p…

LeetCode--134

134. 加油站 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。 给定两个整数数组 …

Camera metadata设计与应用

前言 Android的Camera Metadata是一种数据结构&#xff0c;用于表示图像特征的参数&#xff0c;例如常见的曝光、AE、AWB、flash等参数。在新的Camera API2 / HAL3架构中&#xff0c;这种结构被用来在app-hal之间IPC传输&#xff0c;取代了原先的SetParameter()/GetParameter(…

【蓝桥杯单片机入门记录】动态数码管

目录 一、数码管动态显示概述 二、动态数码管原理图 &#xff08;1&#xff09;原理图 &#xff08;2&#xff09;动态数码管如何与芯片相连 &#xff08;3&#xff09;“此器件” ——>锁存器74HC573 三、动态数码管显示例程 &#xff08;1&#xff09;例程1&#xf…

独立站谷歌SEO外包与自建SEO团队:哪个更适合您的业务?

随着数字营销的崛起&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已成为企业提升在线可见度、吸引潜在客户的关键手段。面对独立站谷歌SEO外包服务和自建SEO团队两种选择&#xff0c;企业往往会感到困惑。本文将深入探讨这两种方式的优势与局限&#xff0c;帮助您做出明…

CentOS 7.9上编译wireshark 3.6

工作环境是Centos 7.9&#xff0c;原本是通过flathub安装的wireshark&#xff0c;但是在gnome的application installer上升级到wireshark 4.2.3之后就运行不起来了&#xff0c;flatpak run org.wireshark.Wireshark启动提示缺少qt6&#xff0c;查了一下wireshark新版是依赖qt6的…

<HarmonyOS第一课>运行Hello World

本课程是基于HarmonyOS 3.1/4.0版本的新技术和特性所推出的系列化课程&#xff0c;每个课程单元里面都包含视频、Codelab、文章和习题&#xff0c;帮助您快速掌握HarmonyOS的应用开发&#xff1b; 通过本章节的学习&#xff0c;您可以安装DevEco Studio开发工具&#xff0c;运行…

docker-集成测试搭建

dockerd守护进程 Dockerd&#xff08;Docker Daemon&#xff09;是 Docker 引擎的守护进程&#xff0c;是运行在后台的一个持续运行的进程&#xff0c;负责管理 Docker 容器、镜像、网络和存储等核心功能。它是 Docker 容器的守护进程&#xff0c;负责接收 Docker API 请求并管…

java面试:Seata 分布式事务

文章目录 引言I Seata 分布式事务1.1 Seata的整体架构1.2 使用 Seata 进行分布式事务管理的步骤1.3 配置Seata Server1.4 Seata分布式模式1.5 高可用II XA模式III TA模式3.1 TA的写隔离3.2 AT模式的优缺点3.3 实现AT模式IV TCC模式 (Try-Confirm-Cancel)补偿事务4.1 空回滚和拒…

Java应用通过jmx_exporter对外暴露jvm指标

示范代码 public class App {public static void main( String[] args ) throws InterruptedException {while(true){Thread.sleep(10000);System.out.println( "Hello World!" );}} } maven打包,生成test-prometheus-1.0-SNAPSHOT.jar 编写config.yaml lowercas…

RISC-V SoC + AI | 在全志 D1「哪吒」开发板上,跑个 ncnn 神经网络推理框架的 demo

引言 D1 是全志科技首款基于 RISC-V 指令集的 SoC&#xff0c;主核是来自阿里平头哥的 64 位的 玄铁 C906。「哪吒」开发板 是全志在线基于全志科技 D1 芯片定制的 AIoT 开发板&#xff0c;是目前还比较罕见的使用 RISC-V SoC 且可运行 GNU/Linux 操作系统的可量产开发板。 n…

Wireshark TS | Linux 系统对时问题

问题描述 节前业务运维同事提交了一个 case &#xff0c;说是部署在新业务区域的 Linux 服务器和老业务区域的 Linux 服务器无法对时&#xff0c;脚本里使用的是 clockdiff 命令&#xff0c;无法正常返回结果&#xff0c;而在老业务区域两台服务器之间执行命令就正常&#xff…

桥接模式(Bridge Pattern)

桥接模式&#xff08;Bridge Pattern&#xff09; 定义 将抽象部分与它的实现部分分离&#xff0c;使它们都可以独立的变化。 属于结构性模式 理解 合成/聚合复用原则的具体实现&#xff0c;将一个整体的多个实现部分独立出来&#xff0c;每个部分都可以独立的变化&#x…

OSI参考模型和TCP/IP网络参考模型

1、OSI参考模型 1.1 产生背景 为了解决网络之间的兼容性问题,实现网络设备间的相互通讯,国际标准化组织ISO于1984年提出了OSIRM(Open System Interconnection Reference Model,开放系统互连参考模型)。OSI参考模型很快成为计算机网络通信的基础模型。由于种种原因,并没有…

android stadio通过wifi热点 adb连接android

问题&#xff1a;有时后忘记带android usb线了&#xff0c;但需要调试 解决办法&#xff1a; 1、准备开发工具adb&#xff0c;需要到sdk下的platform-tools的目录下&#xff0c;或者把这个目录加到系统path里&#xff0c;我的是D:\android\sdk\platform-tools这个目录&#x…

Mysql整理-Mysql事务

MySQL中的事务是一组顺序执行的数据库操作,要么完全执行,要么完全不执行。事务是数据库管理的一个重要概念,尤其是在确保数据完整性和一致性方面。MySQL中的事务遵循ACID属性,这是事务性数据库系统的四个关键特性: 原子性(Atomicity):事务内的所有操作都是作为一个单一…

linux系统---nginx(2)rewrite重写功能

目录 一、rewrite概述 1、rewrite功能 2、跳转场景 二、标准配置指令 1、rewrite日志记录指令 2、未初始化变量告警日志记录指令 3、rewrite 指令 3.1 正则表达式 三、rewrite模块使用实例 1.基于域名的跳转 一、rewrite概述 1、rewrite功能 访问重写 rewrite 是 …

sql 分割字段,并分行

创建测试表格 CREATE TABLE test (id INT PRIMARY KEY, data VARCHAR(100)); INSERT INTO test VALUES (1, A,B,C); INSERT INTO test VALUES (2, D,E,F,G);查询并分割字段 SELECT id, value AS split_data FROM test CROSS APPLY STRING_SPLIT(data, ,) WHERE LEN(value) …

11个Linux性能分析命令

Linux性能分析命令有很多&#xff0c;不同的命令可以用来监控不同的系统资源和活动。根据您的问题&#xff0c;我为您推荐以下11个常用的Linux性能分析命令&#xff1a; uptime&#xff1a;显示系统的运行时间和平均负载。dmesg&#xff1a;显示系统的启动信息和内核的日志信息…