数据结构作业/2024/7/9

2>实现双向循环链表的创建、判空、尾插、遍历、尾删、销毁

fun.c

 #include "head.h"                                                 //1.双向循环链表的创建                                            doubleloop_ptr create_list()                                      {                                                                 //头结点的创立                                                doubleloop_ptr H=(doubleloop_ptr)malloc(sizeof(doubleloop));  if(NULL==H)                                                   {                                                             printf("创建双向循环链表失败\n");                         return NULL;                                              }                                                             H->len=0;                                                     H->next=H;                                                    H->prior=H;                                                   printf("双向循环链表创建成功\n");                             return H;                                                     }                                                                 //2.双向循环链表的判空                                            int empty(doubleloop_ptr H)                                       {                                                                 if(NULL==H)                                                   {                                                             printf("双向循环链表判空失败\n");                         return -1;                                                }                                                             return H->len==0;                                             }                                                                 //3.双向循环链表节点的创建                                        doubleloop_ptr node(datatype e)                                   {                                                                 //创建节点,堆区申请空间                                       doubleloop_ptr p=(doubleloop_ptr)malloc(sizeof(doubleloop));  if(NULL==p)                                                   {                                                             printf("节点创建失败\n");                                 return NULL;                                              }                                                             p->data=e;                                                    p->next=NULL;                                                 p->prior=NULL;                                                return p;                                                     }                                                                 //4.尾插                                                          int insert_tail(doubleloop_ptr H,datatype e)                      {                                                                 if(NULL==H)                                                   {                                                             printf("尾部插入失败\n");                                 return -1;                                                }                                                             doubleloop_ptr p=node(e);                                     //判断双向循环链表的表头后面是否有元素                        if(H->next==H&&H->prior==H)                                   {                                                             p->next=H;//直接相连                                      p->prior=H;                                               H->next=p;                                                H->prior=p;                                               }                                                             else                                                          {                                                             //定义一个指针q指向头结点然后循环到最后一个               doubleloop_ptr q=H;                                       for(int i=0;i<H->len;i++)                                 {                                                         q=q->next;                                            }                                                         p->prior=q;                                               p->next=H;                                                q->next=p;                                                H->prior=p;                                               }                                                             H->len++;                                                     return 1;                                                     }                                                                 //5.遍历                                                          int output(doubleloop_ptr H)                                      {                                                                 if(NULL==H || empty(H))                                       {                                                             printf("遍历结果失败\n");                                 return-1;                                                 }                                                             doubleloop_ptr p=H;                                           while(p->next!=H)                                             {                                                             p=p->next;                                                printf("%d  ",p->data);                                   }                                                             printf("\n");                                                 return 1;                                                     }                                                                 //6.尾删                                                          int del_tail(doubleloop_ptr H)                                    {                                                                 if(NULL==H || empty(H))                                       {                                                             printf("尾删失败\n");                                     return -1;                                                }                                                             doubleloop_ptr q=H;                                           for(int i=0;i<H->len;i++)                                     {                                                             q=q->next;                                                }                                                             q->prior->next=H;                                             H->prior=q->prior;                                            free(q);                                                      q=NULL;                                                       H->len--;                                                     return 1;                                                     }                                                                 //7.销毁链表                                                      int destory(doubleloop_ptr H)                                     {                                                                 if(NULL==H ||empty(H))                                        {                                                             printf("销毁双向链表失败\n");                             }                                                             //循环尾删链表                                                while(H->next!=H)                                             {                                                             del_tail(H);                                              }                                                             free(H);                                                      H=NULL;                                                       printf("链表已删除\n");                                       return 1;                                                     }                                                                 

main.c

#ifndef __HEAD_H__                                                  
#define __HEAD_H__                                                  #include <stdio.h>                                                  
#include <stdlib.h>                                                 //对结构体内部的数据类型重定义                                      
typedef int datatype;                                               //定义双向循环链表结构体                                            
typedef struct node                                                 
{                                                                   union//结构体内的共用体储存数据和长度                           {                                                               datatype data;//普通节点存储的数据                          int len;//头结点存储的长度数据                              };                                                              struct node* next;//定义结构体类型的指针                        struct node* prior;                                             
}doubleloop,*doubleloop_ptr;//双线循环链表类型重命名,及其指针重命名 //1.双向循环链表的创建                                              
doubleloop_ptr create_list();                                       
//2.双向循环链表的判空                                              
int empty(doubleloop_ptr H);                                        
//3.双向循环链表节点的创建                                          
doubleloop_ptr node(datatype e);                                    
//4.尾插                                                            
int insert_tail(doubleloop_ptr H,datatype e);                       
//5.遍历                                                            
int output(doubleloop_ptr H);                                       
//6.尾删                                                            
int del_tail(doubleloop_ptr H);                                     
//7.销毁链表                                                        
int destory(doubleloop_ptr H);                                      
#endif                                                              

 head.h

#include "head.h"int main(int argc, const char *argv[]
{//双向循环链表的创建doubleloop_ptr H=create_list();//尾插insert_tail(H,1000);insert_tail(H,1001);insert_tail(H,1003);insert_tail(H,1004);insert_tail(H,1005);insert_tail(H,1006);insert_tail(H,1007);insert_tail(H,1008);//遍历output(H);//尾删 del_tail(H);del_tail(H);del_tail(H);output(H);//释放destory(H);                      H=NULL;output(H);return 0;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【自用】【高昆轮概率论与数理统计笔记】2.1 分布函数的概念与性质

不定期更新&#xff0c;前面的章节会在学完后补回来&#xff0c;重新学学概率&#xff0c;当年考研考的数学二&#xff0c;没有概率基础&#xff0c;想自己补补&#xff0c;视频课是高昆轮老师讲的浙大四版概率论教材的视频课&#xff0c;地址&#xff1a; 第一章&#xff1a;h…

类似评论、省市区这种具有层次结构的数据表怎么设计?

业务功能模块 评论、回复模块省市区表 设置一个给每个数据设置一个parent_id 例如&#xff1a; 某个视频下a写了条评论&#xff0c;那a的parent_id就是0;b回复了a&#xff0c;那b的parent_id就是a的id;c回复了b&#xff0c;那c的parent_id就是b的id; 这样&#xff0c;所有评论…

全终端自动化测试框架wyTest

突然有一些觉悟&#xff0c;程序猿不能只会吭哧吭哧的低头做事&#xff0c;应该学会怎么去展示自己&#xff0c;怎么去宣传自己&#xff0c;怎么把自己想做的事表述清楚。 于是&#xff0c;这两天一直在整理自己的作品&#xff0c;也为接下来的找工作多做点准备。接下来…

leetcode--从中序与后序遍历序列构造二叉树

leeocode地址&#xff1a;从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder …

三级_网络技术_12_路由设计技术基础

1.R1、R2是一个自治系统中采用RIP路由协议的两个相邻路由器&#xff0c;R1的路由表如下图(a)所示&#xff0c;当R1收到R2发送的如下图(b)的(V.D)报文后&#xff0c;R1更新的4个路由表项中距离值从上到下依次为0、3、3、4 那么&#xff0c;①②③④可能的取值依次为()。 0、4、…

Git命令常规操作

目录 常用操作示意图 文件的状态变化周期 1. 创建文件 2. 修改原有文件 3. 删除原有文件 没有添加到暂存区的数据直接 rm 删除即可&#xff1a; 对于添加到暂存区的数据 文件或目录&#xff1a; 4. 重命名暂存区数据 5. 查看历史记录 6. 还原历史数据 恢复过程的原…

[安洵杯 2019]easy_serialize_php

源码&#xff1a; <?php$function $_GET[f];function filter($img){$filter_arr array(php,flag,php5,php4,fl1g);$filter /.implode(|,$filter_arr)./i;return preg_replace($filter,,$img); }if($_SESSION){unset($_SESSION); }$_SESSION["user"] guest; …

240709_昇思学习打卡-Day21-文本解码原理--以MindNLP为例

240709_昇思学习打卡-Day21-文本解码原理–以MindNLP为例 今天做根据前文预测下一个单词&#xff0c;仅作简单记录及注释。 一个文本序列的概率分布可以分解为每个词基于其上文的条件概率的乘积 &#x1d44a;_0:初始上下文单词序列&#x1d447;: 时间步当生成EOS标签时&a…

HybridCLR + Addressable 热更新篇(一)

目录 前言一、HybridCLR 和 Addressable 是什么&#xff1f;1. HybridCLR2. Addressable 二、使用步骤1.HybridCLR导入2.HybridCLR配置3.Addressable导入4.Addressable配置 前言 随着移动互联网和游戏行业的快速发展&#xff0c;热更新技术变得越来越重要。热更新能够在不重新…

解决树形表格 第一列中文字没有对齐

二级分类与一级分类的文字没有对齐 <el-table:data"templateStore.hangyeList"style"width: 100%"row-key"id":tree-props"{ children: subData, hasChildren: hasChildren }" ><el-table-column prop"industryCode&quo…

金蝶部署常见问题解决

金蝶部署常见问题解决 金蝶版本&#xff1a; Apusic Application Server Enterprise Edition 9.0 SP8 kbc build 202312041121 报错信息&#xff1a; 与金蝶官方人员沟通&#xff0c;发现lib包版本太低&#xff0c;升级后可正常使用。替换lib包后重启服务。 下载lib: 链接: …

中职网络安全B模块渗透测试server2003

通过本地PC中渗透测试平台Kali对服务器场景Windows进⾏系统服务及版本扫描渗透测 试&#xff0c;并将该操作显示结果中Telnet服务对应的端⼝号作为FLAG提交 使用nmap扫描发现目标靶机开放端口232疑似telnet直接进行连接测试成功 Flag&#xff1a;232 通过本地PC中渗透测试平台…

LLM应用构建前的非结构化数据处理(三)文档表格的提取

1.学习内容 本节次学习内容来自于吴恩达老师的Preprocessing Unstructured Data for LLM Applications课程&#xff0c;因涉及到非结构化数据的相关处理&#xff0c;遂做学习整理。 本节主要学习pdf中的表格数据处理 2.环境准备 和之前一样&#xff0c;可以参考LLM应用构建前…

【结构性型模式-适配器模式】

定义 将一个类的接口转换成客户希望的另外一个接口&#xff0c;使得原本由于接口不兼容而不能一起工作的那些类能一起工作。 适配器模式分为类适配器模式和对象适配器模式&#xff0c;前者类之间的耦合度比后者高&#xff0c;且要求程序员了解现有组件库中的相关组件的内部结…

TAGE predictor

参考文档&#xff1a;分支预测算法&#xff08;一&#xff09;&#xff1a;TAGE|SunnyChen的小窝 TAGE的基础概念 TAGE是现今最经典的分支预测算法&#xff0c;TAGE及其后续的变体都是当今高性能微处理器的分支预测算法基础。因此&#xff0c;要聊分支预测算法的话题必定绕不开…

C语言编程4:复合赋值,递增递减运算符,局部变量与全局变量,本地变量,转义字符

一篇文章带你玩转C语言基础语法4&#xff1a;复合赋值&#xff0c;递增递减运算符&#xff0c;局部变量与全局变量&#xff0c;本地变量&#xff0c;转义字符 一、复合赋值&#x1f33f; 1.1&#x1f4a0;定义 赋值就是给任意一个变量或者常量赋一个值&#xff0c;这个值可以…

0基础学会在亚马逊云科技AWS上搭建生成式AI云原生Serverless问答QA机器人(含代码和步骤)

小李哥今天带大家继续学习在国际主流云计算平台亚马逊云科技AWS上开发生成式AI软件应用方案。上一篇文章我们为大家介绍了&#xff0c;如何在亚马逊云科技上利用Amazon SageMaker搭建、部署和测试开源模型Llama 7B。下面我将会带大家探索如何搭建高扩展性、高可用的完全托管云原…

在亚马逊云科技AWS上利用SageMaker机器学习模型平台搭建生成式AI应用(附Llama大模型部署和测试代码)

项目简介&#xff1a; 接下来&#xff0c;小李哥将会每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。本次介绍的是如何在Amazon …

VBA实现Excel的数据透视表

前言 本节会介绍通过VBA的PivotCaches.Create方法实现Excel创建新的数据透视表、修改原有的数据透视表的数据源以及刷新数据透视表内容。 本节测试内容以下表信息为例 1、创建数据透视表 语法&#xff1a;PivotCaches.Create(SourceType, [SourceData], [Version]) 说明&am…

C语言程序题(一)

一.三个整数从大到小输出 首先做这个题目需要知道理清排序的思路&#xff0c;通过比较三个整数的值&#xff0c;使之从大到小输出。解这道题有很多方法我就总结了两种方法&#xff1a;一是通过中间变量比较和交换&#xff0c;二是可以用冒泡排序法&#xff08;虽然三个数字排序…