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

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

相关文章

【盲源分离】快速理解FastICA算法(附MATLAB绘图程序)

今天讲一个在信号分析领域较为常用的一个方法&#xff0c;即盲源分离算法中的FastICA。 我们先从一个经典的问题引入。 一、鸡尾酒舞会问题 想象一下&#xff0c;你身处一个熙熙攘攘的鸡尾酒舞会中。四周回荡着各种声音&#xff1a;笑声、交谈声、玻璃碰撞声&#xff0c;甚至…

Hybird App开发,纯血鸿蒙系统快速兼容救星

2024年1月18日的开发者&#xff08;HDC&#xff09;大会上&#xff0c;就官宣了“纯血鸿蒙”操作系统即将于2024年3季度正式投产。与此同时&#xff0c;支付宝、京东、小红书、微博、高德地图、中国移动等在内的超百个头部应用都启动了鸿蒙原生应用开发&#xff0c;鸿蒙开发者日…

Flink CDC 提取记录变更时间作为事件时间和 Hudi 表的 precombine.field 以及1970-01-01 取值问题

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

【QT+QGIS跨平台编译】之五十四:【QGIS_CORE跨平台编译】—【qgssqlstatementlexer.cpp生成】

文章目录 一、Flex二、生成来源三、构建过程一、Flex Flex (fast lexical analyser generator) 是 Lex 的另一个替代品。它经常和自由软件 Bison 语法分析器生成器 一起使用。Flex 最初由 Vern Paxson 于 1987 年用 C 语言写成。 “flex 是一个生成扫描器的工具,能够识别文本中…

Java Web(十)--jQuery

介绍 官网文档&#xff1a;jQuery 教程 jQuery API 中文文档 | jQuery API 中文在线手册 | jquery api 下载 | jquery api chm 下载地址&#xff1a;https://jquery.com/download/%20jQuery jQuery 是一个快速的&#xff0c;简洁的 javaScrip工具库&#xff0c;使用户能更方…

Mycat核心教程--Mycat 监控工具【四】

Mycat核心教程--Mycat 监控工具 九、Mycat 监控工具9.1.Mycat-web 简介9.2.Mycat-web 配置使用9.2.1.ZooKeeper 安装【上面有】9.2.2.Mycat-web 安装9.2.2.1.下载安装包9.2.2.2.安装包拷贝到Linux系统/opt目录下&#xff0c;并解压9.2.2.3.拷贝mycat-web文件夹到/usr/local目录…

C#理论 —— WPF 应用程序Console 控制台应用

文章目录 1. WPF 应用程序1.1 工程创建1.2 控件1.2.1 控件的公共属性1.2.1 TextBox 文本框1.2.1 Button 按钮 *. Console 控制台应用1.1 工程创建 1. WPF 应用程序 1.1 工程创建 Visual Studio 中新建项目 - 选择WPF 应用程序&#xff1b; 1.2 控件 1.2.1 控件的公共属性 …

测试开发(6)软件测试教程——自动化测试selenium(自动化测试介绍、如何实施、Selenium介绍 、Selenium相关的API)

接上次博客&#xff1a;测试开发&#xff08;5&#xff09;测试分类标准 &#xff1a;按测试对像划分、按是否查看代码划分、按开发阶段划分、按测试实施组织、按是否运行划分、按是否手工划分、按测试地域划分-CSDN博客 目录​​​​​​​ 什么是自动化测试 自动化测试介绍…

单晶银粉在光伏发电和电子电气领域需求旺盛 我国市场国产化进程有望加快

单晶银粉在光伏发电和电子电气领域需求旺盛 我国市场国产化进程有望加快 单晶银粉指以单晶形式存在的银材料。与普通银粉相比&#xff0c;单晶银粉具有化学稳定性好、光学透过率高、导电性佳、导热性好、易于加工、纯度高等优势&#xff0c;在光伏发电、电子电气等领域拥有广阔…

C语言数组和函数的实验:扫雷游戏

1. 游戏的分析设计 1.1 扫雷游戏的功能 游戏通过菜单实现继续或者退出游戏扫雷的棋盘是9*9的格子默认随机布置10个雷排查雷 如果位置不是雷&#xff0c;就显示周围附近有几个雷 如果位置是雷&#xff0c;失败&#xff0c;游戏结束 把非雷的都找到&#xff0c;成功过关&…

主题公园保管资产难?三防加固平板对此说不!

主题公园是一个活跃&#xff0c;快节奏的环境&#xff0c;主题公园最重要的资产之一是他们的表演者和每天制作的节目。但是检查道具以及寻找服装的去向是一项艰巨的任务&#xff1b;如果没有适当的系统和流程&#xff0c;可能会导致资产损失和材料放错位置&#xff0c;最终导致…

新加坡服务器托管:开启全球化发展之门

新加坡作为一个小国家&#xff0c;却在全球范围内享有极高的声誉。新加坡作为亚洲的科技中心&#xff0c;拥有先进的通信基础设施和成熟的机房托管市场。除了其独特的地理位置和发达的经济体系外&#xff0c;新加坡还以其开放的商业环境和便利的托管服务吸引着越来越多的国际公…