数据结构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…

<HarmonyOS第一课>运行Hello World

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

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…

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

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

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

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

11个Linux性能分析命令

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

如何改变.net托管的入口main函数

有小伙伴问: .NET托管入口Main函数可以修改成别的函数&#xff0c;用来作为程序的入口吗&#xff1f; 答案&#xff1a;当然是可以的。这也算是.NET里面非常简单的骚操了。本篇来用最新的.NET8演示下&#xff0c;如何修改Main入口。 1.简单控制台例子&#xff1a; namespace…

【JavaEE】_tomcat的安装与使用

目录 1. Tomcat简介 2. Tomcat安装 2.1 下载Tomcat并解压缩 2.2 启动Tomcat 2.2.1 Tomcat乱码问题 2.2.2 Tomcat闪退问题 2.3 访问Tomcat欢迎页面 3. 使用Tomcat部署前端代码 3.1 路径匹配 3.2 文件路径访问与网络访问 4. 静态页面与动态页面 5. 基于tomcat的网站后…

更换个人开发环境后,pycharm连接服务器报错Authentication failed

原因&#xff1a;服务器中更换个人开发环境后&#xff0c;密码变了。 解决&#xff1a;在pycharm中修改服务器开发环境密码即可。 1 找到Tools-Depolyment-Configuration 2 点击SSH Configuration后的省略号 3 修改这里面的Password即可

婚恋交友系统源码-交友APP小程序H5开发-源码交付,支持二开-实名制交友更放心!

一、交友小程序开发的重要性 1. 满足人们的社交需求&#xff1a;交友小程序为人们提供了一个便捷的社交平台&#xff0c;使得人们可以随时随地地结识新朋友&#xff0c;拓展自己的社交圈子。 2. 丰富人们的业余生活&#xff1a;通过交友小程序&#xff0c;人们可以参加各种线…

lv21 QT 常用控件 2

1 QT GUI 类继承简介 布局管理器 输出控件 输入控件 按钮 容器 2 按钮示例 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QCheckBox> #include <QLineEdit> #include <QPushButton>class Widget : public QWidget {Q_OBJECTpublic…

探究前端路由hash和history的实现原理(包教包会)

今天我们来讲一讲前端中很重要的一个部分路由&#xff08;router&#xff09;&#xff0c;想必前端小伙伴对‘路由’一词都不会感到陌生。但是如果哪天面试官问你&#xff0c;能大概说一说前端路由的实现原理吗&#xff1f; 你又会如何应对呢&#xff1f; 今天勇宝就带着大家一…

LeetCode 0938.二叉搜索树的范围和:深度优先搜索(可中序遍历)

【LetMeFly】938.二叉搜索树的范围和&#xff1a;深度优先搜索&#xff08;可中序遍历&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/range-sum-of-bst/ 给定二叉搜索树的根结点 root&#xff0c;返回值位于范围 [low, high] 之间的所有结点的值的和。…

动态规划课堂2-----路径问题

目录 引言&#xff1a; 例题1&#xff1a;不同路径 例题2&#xff1a;不同路径II 例题3&#xff1a;礼物的最⼤价值 例题4&#xff1a;下降路径最⼩和 例题5&#xff1a;最小路径和 结语&#xff1a; 引言&#xff1a; 在学习完动态规划斐波那契数列模型后&#xff0c;…

信息安全计划

任何管理人员或人力资源专业人士都知道&#xff0c;除非彻底记录标准和实践&#xff0c;否则永远无法真正实施和执行标准和实践。正如您可能想象的那样&#xff0c;在保护您的网络、技术和数据系统免受网络威胁以及在发生这些事件时规划最及时、高效和有效的响应时&#xff0c;…