数据结构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.rhkb.cn/news/264914.html

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

相关文章

Springboot中如何记录好日志

Springboot中如何记录日志 日志体系整体介绍 日志一直在系统中占据这十分重要的地位&#xff0c;他是我们在系统发生故障时用来排查问题的利器&#xff0c;也是我们做操作审计的重要依据。那么如何记录好日志呢&#xff1f;选择什么框架来记录日志&#xff0c;是不是日志打越…

LeetCode142. 环形链表 II刷题详解

今天力扣刷到了一个特别有意思的题目&#xff0c;于是就写了下面的题解来加深以下理解。 142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; 这个可以分为两大步去写&#xff0c;首先要判断链表是否有环&#xff0c;然后如果有环就去找到环的入口&#xff0c;没有环返…

Vue源码系列讲解——生命周期篇【七】(模板编译阶段)

目录 1. 前言 2. 模板编译阶段分析 2.1 两种$mount方法对比 2.2 完整版的vm.$mount方法分析 3. 总结 1. 前言 前几篇文章中我们介绍了生命周期的初始化阶段&#xff0c;我们知道&#xff0c;在初始化阶段各项工作做完之后调用了vm.$mount方法&#xff0c;该方法的调用标志…

Vue + Echarts页面内存占用高问题解决

Vue Echarts页面内存占用高问题解决 1.问题描述 目前使用的是Vue2 Echarts4.x的组合&#xff0c;页面如下所示。 就是一个类似于神策的数据看板页面&#xff0c;左侧是一个导航栏&#xff0c;右侧看板页面中包含很多个报表图片&#xff0c;其中报表页面中对Echarts图表进…

Excel的中高级用法

单元格格式&#xff0c;根据数值的正负分配不同的颜色和↑ ↓ 根据数值正负分配颜色 2-7 [蓝色]#,##0;[红色]-#,##0 分配颜色的基础上&#xff0c;根据正负加↑和↓ 2↑-7↓ 其实就是在上面颜色的代码基础上加个 向上的符号↑&#xff0c;或向下的符号↓ [蓝色]#,##0↑;[红色…

Python算法题集_图论(课程表)

Python算法题集_课程表 题207&#xff1a;课程表1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【循环递归全算】2) 改进版一【循环递归缓存】3) 改进版二【循环递归缓存反向计算】4) 改进版三【迭代剥离计数器检测】 4. 最优算法5. 相关资源 本…

蓝桥杯算法赛 第 6 场 小白入门赛 解题报告 | 珂学家 | 简单场 + 元宵节日快乐

前言 整体评价 因为适逢元宵节&#xff0c;所以这场以娱乐为主。 A. 元宵节快乐 题型: 签到 节日快乐&#xff0c;出题人也说出来自己的心愿, 祝大家AK快乐! import java.util.Scanner;public class Main {public static void main(String[] args) {System.out.println(&qu…

现代化数据架构升级:毫末智行自动驾驶如何应对年增20PB的数据规模挑战?

毫末智行是一家致力于自动驾驶的人工智能技术公司&#xff0c;其前身是长城汽车智能驾驶前瞻分部&#xff0c;以零事故、零拥堵、自由出行和高效物流为目标&#xff0c;助力合作伙伴重塑和全面升级整个社会的出行及物流方式。 在自动驾驶领域中&#xff0c;是什么原因让毫末智行…

Unity3D 使用 Proto

一. 下载与安装 这里下载Google Protobuff下载 1. 源码用来编译CSharp 相关配置 2. win64 用于编译 proto 文件 二. 编译 1. 使用VS 打开 2. 点击最上面菜单栏 工具>NuGet 包管理器>管理解决方案的NuGet 管理包 版本一定要选择咱们一开始下载的对应版本否则不兼容&am…

linux中的权限

Linux 的权限 在了解Linux的权限之前&#xff0c;我们需要知道Linux的构成&#xff0c;Linux分为三个部分&#xff0c;内核、外部程序、以及用户。 内核&#xff1a; 内核一般是指Linux的操作系统&#xff0c;用来执行用户发送的指令 或者 拒绝执行用户发布指令时而发出的报…

Elasticsearch 创建index库 timeout

问题概述 使用 python 客户端 代码进行创建&#xff0c;【之前成功创建&#xff0c;但是现在出现报错&#xff0c;报错代码es_connection.client.indices.create】 def create_vector_index(dataset_index_name,vector_query_field,query_field):es_connection get_collentio…

高并发Server的基石:reactor反应堆模式

业务开发同学只关心业务处理流程。但是我们开发的程序都是运行服务端server上&#xff0c;服务端server接收到IO请求后&#xff0c;是如何处理请求并最终进入业务流程的呢&#xff1f;这里不得不提到reactor反应堆模型。reactor反应堆模型来源于大师Doug Lea在 《Sacalable io …

python Matplotlib Tkinter-->导出pdf报表

环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 reportlab 4.0.9 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk import tkinter as tk import tkinter.messagebox as messagebox impor…

11-pytorch-使用自己的数据集测试

b站小土堆pytorch教程学习笔记 import torch import torchvision from PIL import Image from torch import nnimg_path ../imgs/dog.png imageImage.open(img_path) print(image) # imageimage.convert(RGB)transformtorchvision.transforms.Compose([torchvision.transforms.…

设计模式(六)代理模式

相关文章设计模式系列 1.代理模式简介 代理模式介绍 代理模式也叫委托模式&#xff0c;是结构型设计模式的一种。在现实生活中我们用到类似代理模式的场景有很多&#xff0c;比如代购、代理上网、打官司等。 定义 为其他对象提供一种代理以控制这个对象的访问。 代理模式…

Nginx——安装和反向代理

Nginx安装与应用 1.1 Nginx介绍 Nginx 是一个高性能的HTTP和反向代理服务器,特点是占有内存少&#xff0c;并发能力强 Nginx可以作为静态页面的web服务器&#xff0c;同时还支持CGI协议的动态语言&#xff0c;比如perl、php等。但是不支持java。Java程序只能通过与tomcat配合…

云原生之容器编排实践-ruoyi-cloud项目部署到K8S:MySQL8

背景 前面搭建好了 Kubernetes 集群与私有镜像仓库&#xff0c;终于要进入服务编排的实践环节了。本系列拿 ruoyi-cloud 项目进行练手&#xff0c;按照 MySQL &#xff0c; Nacos &#xff0c; Redis &#xff0c; Nginx &#xff0c; Gateway &#xff0c; Auth &#xff0c;…

AMRT3D数字孪生引擎详解

AMRT 3D数字孪生引擎介绍 AMRT3D引擎是一款融合了眸瑞科技的AMRT格式与轻量化处理技术为基础&#xff0c;以降本增效为目标&#xff0c;支持多端发布的一站式纯国产自研的CS架构项目开发引擎。 引擎包括场景搭建、UI拼搭、零代码交互事件、光影特效组件、GIS/BIM组件、实时数据…

跨越千年医学对话:用AI技术解锁中医古籍知识,构建能够精准问答的智能语言模型,成就专业级古籍解读助手(LLAMA)

跨越千年医学对话&#xff1a;用AI技术解锁中医古籍知识&#xff0c;构建能够精准问答的智能语言模型&#xff0c;成就专业级古籍解读助手&#xff08;LLAMA&#xff09; 介绍&#xff1a;首先在 Ziya-LLaMA-13B-V1基线模型的基础上加入中医教材、中医各类网站数据等语料库&am…

科技云报道:黑马Groq单挑英伟达,AI芯片要变天?

科技云报道原创。 近一周来&#xff0c;大模型领域重磅产品接连推出&#xff1a;OpenAI发布“文字生视频”大模型Sora&#xff1b;Meta发布视频预测大模型 V-JEPA&#xff1b;谷歌发布大模型 Gemini 1.5 Pro&#xff0c;更毫无预兆地发布了开源模型Gemma… 难怪网友们感叹&am…