作业/数据结构/2023/7/10

1.实现单向链表队列的,创建,入队,出队,遍历,长度,销毁。

main.c

#include "head.h"int main(int argc, const char *argv[])
{//创建链式队列queue_ptr QL=create_queue();//入栈push(QL, 1000);push(QL, 1001);push(QL, 1002);push(QL, 1003);push(QL, 1004);//遍历 output(QL);//出队pop( QL);output(QL);//长度length(QL);//销毁 freedom(QL);return 0;
}                                     

head.h

#ifndef __HEAD_H__                
#define __HEAD_H__                #include <stdio.h>                
#include <stdlib.h>               
//定义节点中的数据类型            
typedef int datatype;             
//定义节点结构体                  
typedef struct node               
{                                 union                         {                             int len;                  datatype data;            };                            struct node*next;             
}Node;                            //定义链式队列结构体              
typedef struct seq                
{                                 Node *head;                   Node *tail;                   
}queue,*queue_ptr;                //1.创建链式队列                  
queue_ptr create_queue();         
//2.判断为空操作                  
int empty(queue_ptr QL);          
//3.链式队列入队                  
int push(queue_ptr QL,datatype e);
//4.链式队列的遍历                
void output(queue_ptr QL);        
//5,链式队列的出队只能从对头删除  
void pop(queue_ptr QL);           
//6.长度                          
void length(queue_ptr QL);        
//销毁                            
void freedom(queue_ptr QL);       
#endif                            

 fun.c

 #include "head.h"                                     //1.创建链式队列                                      queue_ptr create_queue()                              {                                                     //申请链式队列的结构体的大小空间                  queue_ptr QL=(queue_ptr)malloc(sizeof(queue));    //判断链式队列申请节点成功没有                    if(NULL==QL)                                      {                                                 printf("创建链式队列失败\n");                 return NULL;                                  }                                                 //申请节点结构体的大小空间                        QL->head=(Node*)malloc(sizeof(Node));             //判断链式队列节点申请有没有成功                  if(NULL==QL->head)                                {                                                 printf("节点创建失败\n");                     free(QL);                                     return NULL;                                  }                                                 //头节点创建成功                                  QL->head->len=0;//节点长度置0                     QL->head->next=NULL;//节点指针域指向NULL          //链式队列结构体里面的指针指向                    QL->tail=QL->head;                                printf("链式队列创建成功\n");                     return QL;                                        }                                                     //2.判断为空操作                                      int empty(queue_ptr QL)                               {                                                     if(QL==NULL)                                      {                                                 printf("判空操作失败\n");                     return -1;                                    }                                                 //当链式队列结构体的指针指向同一个节点            return QL->head==QL->tail;                    }                                                     //3.链式队列入队                                      int push(queue_ptr QL,datatype e)                     {                                                     if(QL==NULL)                                      {                                                 printf("入队失败\n");                         return 0;                                     }                                                 //申请普通节点                                    Node *p=(Node*)malloc(sizeof(Node));              if(NULL==p)                                       {                                                 printf("申请节点失败\n");                     return 0;                                     }                                                 p->data=e;                                        p->next=NULL;                                     //然后尾插                                        QL->tail->next=p;                                 QL->tail=p;                                       //长度自增                                        QL->head->len++;                                  return 1;                                         }                                                     //4.链式队列的遍历                                    void output(queue_ptr QL)                             {                                                     if(NULL==QL ||empty(QL))                          {                                                 printf("遍历失败\n");                         return ;                                      }                                                 //循环遍历的指向的指针                            Node* q=QL->head;                                 while(q->next!=NULL)                              {                                                 q=q->next;                                    printf("%d  ",q->data);                       }                                                 printf("\n");                                     }                                                     //5,链式队列的出队只能从对头删除                      void pop(queue_ptr QL)                                {                                                     if(NULL==QL ||empty(QL))                          {                                                 printf("出队失败\n");                         return ;                                      }                                                 //定义一个遍历指向队头指针                        Node*p=QL->head->next;                            //头指针指向下一节点                              QL->head->next=p->next;                           free(p);                                          p=NULL;                                           QL->head->len--;                                  }                                                     //6.长度                                              void length(queue_ptr QL)                             {                                                     if(NULL==QL)                                      {                                                 printf("输出长度失败\n");                     return ;                                      }                                                 int len=QL->head->len;                            printf("该顺序链式队列的长度为:%d\n",len);        return;                                           }                                                     //销毁                                                void freedom(queue_ptr QL)                            {                                                     if(NULL==QL)                                      {                                                 printf("销毁失败\n");                         return ;                                      }                                                 while(QL->head->next!=NULL)                       {                                                 pop(QL);                                      }                                                 free(QL->head);                                   QL->head=NULL;                                    printf("销毁成功\n");                             return;                                           
}

 

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

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

相关文章

imx6ull/linux应用编程学习(16)emqx ,mqtt创建连接mqtt.fx

在很多项目中都需要自己的私人服务器&#xff0c;以保证数据的隐私性&#xff0c;这里我用的是emqx。 1.进入emqx官网 EMQX&#xff1a;用于物联网、车联网和工业物联网的企业级 MQTT 平台 点击试用cloud 申请成功后可得&#xff1a;&#xff08;右边的忽略&#xff09; 进入…

告别PS,ChatGPT图片局部修改,手把手教你成为画图高手

大家好&#xff0c;我是YUAN&#xff01; 今天&#xff0c;我要向大家介绍一个能够点燃创意火花的画图设计神器——DALLE编辑器。让艺术创作&#xff0c;尤其是画图变得更加简单、直观&#xff0c;甚至可以说是革命性的。 DALLE是什么&#xff1f; DALLE编辑器的问世&#xf…

macOS系统下载navicat安装包

链接: https://pan.baidu.com/s/1SqTIXNL-B8ZMJxIBu1DfIw?pwdc1z8 提取码: c1z8 安装后效果

buuctf题目讲解-1

一眼就解密 ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30 flag{THEFLAGOFTHISSTRING} base家族 base64 加密原理&#xff1a; 明文&#xff1a;abc 去找ascii码的二进制形式 a-->97-→01100001 &#xff08;二进制为8位如果不足8位则在最左边补0至8位&#xff09; b-→…

生物环保的技术原理和优点是什么

生物环保的技术原理和优点可以归纳如下&#xff1a; 技术原理 生物环保利用生物学原理&#xff0c;采用生物技术&#xff0c;通过生物过程来净化环境&#xff0c;消除污染物&#xff0c;减少污染源&#xff0c;从而改善环境质量。这主要依赖于微生物的代谢活动、生长特性和相…

05STM32EXIT外部中断中断系统

STM32EXIT外部中断&中断系统 中断系统中断触发条件&#xff1a;中断处理流程和用途&#xff1a; STM32中断NVIC嵌套中断向量控制器基本结构 中断系统 中断触发条件&#xff1a; 对外部中断来说&#xff0c;可以是引脚发生了电平跳变 对定时器来说&#xff0c;可以是定时的…

算法系列--链表问题

一.一些经验总结 链表天然具有递归性质,单链表可以看做一个单叉树,很多可以应用到二叉树的题目也可以应用到链表的题目之中,下面是一个体现单链表递归性质很好的例子逆序打印链表的值 private void reversePrint(ListNode head) {if(head null) return;reversePrint(head.ne…

速盾:cdn节点作用?

CDN&#xff08;Content Delivery Network&#xff09;指的是内容分发网络&#xff0c;是一种通过部署在全球不同地理位置的服务器节点来提供快速、高效的内容传输和分发的技术架构。CDN节点在网络中的作用非常重要&#xff0c;下面就对其作用进行详细解析。 提供高速内容传输&…

《算法笔记》总结No.6——贪心

一.简单贪心 贪心法是求解一类最优化问题的方法&#xff0c;它总是考虑在当前状态下局部最优(或较优)之后&#xff0c;来使全局的结果达到最优(或较优)的策略。显然&#xff0c;如果采取较优而非最优的策略(最优策略可能不存在或是不易想到)&#xff0c;得到的全局结果也无法是…

socketserver和WSGI服务端实现教程

Python socketserver 和 WSGI 服务端实现教程 在本文中&#xff0c;我们将详细解析一个使用 socketserver 模块实现的简单 WSGI 服务器。该服务器能够处理 HTTP 请求&#xff0c;支持 WSGI 应用&#xff0c;并正确处理响应头和错误。 代码概述 这段代码定义了一个 run_wsgi …

【深入理解JVM】关于Object o = new Object()

1. 解释一下对象的创建过程 “半初始化”状态通常指的是对象在内存分配后、但在完全初始化之前的一种状态。在Java中&#xff0c;虽然JVM的规范和设计努力避免对象处于这种不稳定的状态&#xff0c;但在多线程环境下&#xff0c;由于指令重排序等并发问题&#xff0c;仍有可能…

Apache Spark详解

目录 性能优化 银行业务案例&#xff1a; 步骤1&#xff1a;环境准备和数据加载 步骤2&#xff1a;数据探索和预处理 步骤3&#xff1a;特征工程 步骤4&#xff1a;数据转换 步骤5&#xff1a;构建机器学习模型 步骤6&#xff1a;模型评估 步骤7&#xff1a;部署和监控…

Spring JdbcTemplate使用

maven引入Spring JDBC <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.19</version></dependency> Spring配置中配置 <!-- DataSource配置 --><bean id"…

java代理简单理解

一、什么是代理 举例说明&#xff1a;当我想买一台电脑&#xff0c;国内太贵了。委托好友A在国外帮忙买。 这个情节中我要实现的动作和好友实现的动作一样&#xff0c;都是买电脑。好友帮我完成了这个动作&#xff0c;这就是代理。 类A和类B都实现一个interface接口C&#x…

【LeetCode刷题笔记】LeetCode.24.两两交换链表中的节点

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法知识专栏&#xff1a;算法分析&#x1f525; 给大家跳段街舞感谢…

新手小白的pytorch学习第一弹-------张量

1 导入pytorch包 import torch2 创建张量&#xff08;tensor&#xff09; scalar标量 scalar torch.tensor(7) scalartensor(7)scalar.ndim查看scalar的维度&#xff0c;因为scalar是标量&#xff0c;所以维度为0 0scalar.shapetorch.Size([])torch.item()7vector&#xf…

Apache功能配置:访问控制、日志分割; 部署AWStats日志分析工具

目录 保持连接 访问控制 只允许指定ip访问 拒绝指定主机其他正常访问 用户授权 日志格式 日志分割 操作步骤 使用第三方工具cronolog分割日志 AWStats日志分析 操作步骤 访问AwStats分析系统 保持连接 Apache通过设置配置文件httpd-default.conf中相关的连接保持参…

基于Java的科大讯飞大模型API调用实现

写在前面&#xff1a;因为现在自己实习的公司新拓展的一个业务是结合AI的低代码平台&#xff0c;我负责后端的开发&#xff0c;之前一直都是直接使用gpt或者文心一言等ui界面来直接使用大模型&#xff0c;从来没有自己调接口过&#xff0c;所以本文记录一下自己第一次使用大模型…

源代码防泄漏的正确方法

为了保护公司的源代码不被泄露&#xff0c;IT企业可以采取一系列严格的安全措施。这些措施涵盖技术手段、管理策略和操作流程&#xff0c;形成多层次的防护体系做到源代码防泄漏工作。 技术手段 1、源代码加密&#xff1a; 采用高级加密标准&#xff08;AES&#xff09;或其他…

【QT】QComboBox允许输入查询,且不区分大小写

目录 0.简介 1.环境 2.详细代码 3.参考 0.简介 项目需求&#xff0c;原本有一个下拉框&#xff0c;但是条目太多&#xff0c;不好搜索&#xff0c;所以用户要求可以输入查找 修改前 &#xff1a; 修改后&#xff1a; 1.环境 windows11 vs-code qt5.12 2.详细代码 QComboB…