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

运行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人事|人事管理系统|基于Springboot的人事管理系统设计与实现(源码+数据库+文档)

人事管理系统目录 目录 基于Springboot的人事管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员登录 2、员工管理 3、公告信息管理 4、公告类型管理 5、培训管理 6、培训类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、…

AI一键生成3D模型!

一、Genie Genie 是 Luma AI 推出的一个文本到 3D 的生成模型&#xff0c;可以在 10 秒生成 4 款 3D 模型&#xff0c;自动精修后质感非常逼真&#xff0c;目前支持免费使用。 此次的 1.0 版本更新后将生成功能由 Discord 转到了单独的网页&#xff0c;使用起来更方便&#x…

C# 学习第三弹——表达式

表达式操作数运算符 &#xff08;一&#xff09;算数运算符 错误例子&#xff1a;这不是python&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 正确结果&a…

安全防御综合实验

需求&#xff1a; 1、办公区设备可以通过电信链路和移动链路上网&#xff08;多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换&#xff09; 2、分公司设备可以通过总公司的移动链路和电信链路访问DMZ区的http服务器 3、分公司内部的客户端可以通过公网地址访问到…

《数据安全销毁实践指南》:企业文件数据保密销毁之人员能力流程技术等干货

数据销毁处理 为了满足合规要求及组织机构本身的业务发展需求&#xff0c;组织机构需要对数据进行销毁处理。因为数据销毁处理要求针对数据的内容进行清除和净化&#xff0c;以确保攻击者无法通过存储介质中的数据内容进行恶意恢复&#xff0c;从而造成严重的敏感信息泄露问题。…

NVM存储设备MTBF介绍

1. 概念 1.1. MTBF MTBF(Mean Time Between Failure)&#xff0c;平均故障间隔时间&#xff0c;也被称为平均无故障时间&#xff0c;是衡量一个产品的可靠性指标&#xff0c;其单位为小时。其定义为&#xff1a;产品在总的使用阶段累计工作时间与故障次数的比值&#xff1a; …

小技巧:Nuxt处理全局组件的显示与隐藏

在Nuxt开发过程中&#xff0c;大家会遇到需要控制全局组件的显示与隐藏。比如说移动端的路由导航栏、头部的返回操作。。。 为了使切换页面的同时&#xff0c;确定是否展示全局组件&#xff0c;保证页面展示的平稳过渡。 下面是我在项目中用到一个办法&#xff0c;已实现。 …

STL常用容器(vector容器)---C++

STL常用容器目录 2.vector容器2.1 vector基本概念2.2 vector构造函数2.3 vector赋值操作2.4 vector容量和大小2.5 vector插入和删除2.6 vector数据存取2.7 vector互换容器2.7.1 vector互换容器收缩内存空间 2.8 vector预留空间 2.vector容器 2.1 vector基本概念 功能&#xf…

FL Studio Producer Edition2024中文进阶版Win/Mac

FL Studio Producer Edition&#xff0c;特别是其【中文进阶版 Win/Mac】&#xff0c;是数字音乐制作领域中的一款知名软件。它为广大音乐制作人、声音工程师以及音乐爱好者提供了一个从音乐构思到最终作品发布的完整解决方案。这个版本特别为中文用户优化&#xff0c;并兼容W…

IT廉连看——C语言——概述

IT廉连看——C语言概述 一、什么是c语言 C语言是一门通用计算机编程语言&#xff0c;广泛应用于底层开发。C语言的设计目标是提供一种能以简易 的方式编译、处理低级存储器、产 生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。 尽管C语言提供了许多低级处理的功…

彩信群发优势及应用场景分析!

一、彩信群发产品服务 彩信群发为多媒体信息服务&#xff0c;通常又称为彩信广告或者彩信营销。其发送与接收一般采用“点对点”的发送方式&#xff0c;系统组成包括软件和硬件设备&#xff08;GPRS MODEM&#xff09;&#xff0c;企业可通过系统&#xff0c;如有关企业形象、产…

电商风控系统(flink+groovy+flume+kafka+redis+clickhouse+mysql)

一.项目概览 电商的防止薅羊毛的风控系统 需要使用 groovy 进行风控规则引擎的编写 然后其它技术进行各种数据的 存储及处理 薅羊毛大致流程 如果单纯使用 if else在业务代码中进行风控规则的编写 那么 维护起来会比较麻烦 并且跟业务系统强绑定不合适 所以一般独立成一个单…

选择排序的简单介绍

选择排序是一种简单直观的排序算法&#xff0c;其原理如下&#xff1a; 1. 遍历数组&#xff0c;找到最小&#xff08;或最大&#xff09;的元素&#xff0c;并将其与数组的第一个元素交换位置。 2. 接着在剩下的元素中找到最小&#xff08;或最大&#xff09;的元素&#xff…

前端架构: 脚手架命令行交互核心实现之inquirer的应用教程

命令行交互核心实现 核心目标&#xff1a;实现命令行行交互&#xff0c;如List命令行的交互呢比命令行的渲难度要更大&#xff0c;因为它涉及的技术点会会更多它涉及以下技术点 键盘输入的一个监听 (这里通过 readline来实现)计算命令行窗口的尺寸清屏光标的移动输出流的静默 …

术中导航系统开发:助力医疗机构提升手术效率和安全性

一、市场概况 近年来&#xff0c;随着医学影像技术和计算机技术的快速发展&#xff0c;术中导航系统得到了广泛应用。根据QY Research的报告&#xff0c;2022年全球术中导航系统市场规模达到了15亿美元&#xff0c;预计到2028年将达到28亿美元。 二、技术特点 术中导航系统主…

【AIGC】OpenAI推出王炸级模型sora,颠覆AI视频行业

文章目录 强烈推荐前言什么是OpenAI Sora&#xff1f;工作原理&#xff1a;算法原理&#xff1a;应用场景展望与其他视频生成模型相比有哪些优势和不足&#xff1f;优点缺点 总结强烈推荐专栏集锦写在最后 强烈推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易…

ubuntu20.04安装和使用 Maldet (Linux Malware Detect)

1、下载 Maldet sudo wget http://www.rfxn.com/downloads/maldetect-current.tar.gz 2、解压Maldet sudo tar -xvf maldetect-current.tar.gz 3、进入到Maldet目录&#xff0c;然后运行安装脚本 sudo ./install.sh 4、安装ClamAV sudo apt-get update sudo apt-get in…

最好的游泳耳机推荐,年度最佳四大拔尖品牌盘点!

游泳耳机是专为水下运动爱好者设计的耳机&#xff0c;它可以让人们在游泳时享受音乐和音频内容。随着科技的发展&#xff0c;市面上出现了越来越多高品质、高性能的游泳耳机品牌。对于游泳者来说&#xff0c;选择一款合适的游泳耳机至关重要。 接下来将为大家推荐四大高品质的…

【selenium】八大元素定位方式|xpath css id name...

目录 一、基础元素定位 二、cssSelector元素定位——通过元素属性定位 三、xpath元素定位——通过路径 1 、xpath绝对定位 &#xff08;用的不多&#xff09; 缺点&#xff1a;一旦页面结构发生变化&#xff08;比如重新设计时&#xff0c;路径少两节&#xff09;&#x…

Springboot教程(二)——过滤器、拦截器

过滤器 过滤器可以在调用控制器方法之前进行一些操作&#xff0c;过滤器类一般放在filter包下。 配置类注册 使用过滤器时&#xff0c;要实现Filter接口&#xff0c;并重写doFilter方法&#xff1a; class TestFilter : Filter {override fun doFilter(request: ServletReq…