作业/数据结构/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 安装后效果

05STM32EXIT外部中断中断系统

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

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

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

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

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

【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;所以本文记录一下自己第一次使用大模型…

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

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

MD5加密和注册页面的编写

MD5加密 1.导入包 npm install --save ts-md5 2.使用方式 import { Md5 } from ts-md5; //md5加密后的密码 const md5PwdMd5.hashStr("123456").toUpperCase(); 遇见的问题及用到的技术 注册页面 register.vue代码 <template><div class"wappe…

关于Python中的字典你所不知道的七个技巧

01 引言 Python是我最喜欢的编程语言之一&#xff0c;它向来以其简单性、多功能性和可读性而闻名。 字典作为Python中最常使用的数据类型&#xff0c;大家几乎每个人都或多或少在项目中使用过字典&#xff0c;但是字典里有一些潜在的技巧可能并不是每个同学都会用到。 在本文…

【UE5.1 角色练习】16-枪械射击——瞄准

目录 效果 步骤 一、瞄准时拉近摄像机位置 二、瞄准偏移 三、向指定方向射击 四、连发 效果 步骤 一、瞄准时拉近摄像机位置 打开角色蓝图&#xff0c;在事件图表中添加如下节点&#xff0c;当进入射击状态时设置目标臂长度为300&#xff0c;从而拉近视角。 但是这样切…

勇攀新高峰|暴雨信息召开2024年中述职工作会议

7月8日至9日&#xff0c;暴雨信息召开2024年中述职工作会议&#xff0c;总结回顾了上半年的成绩和不足&#xff0c;本次会议采用线上线下的方式举行&#xff0c;公司各部门管理人员、前台市场营销人员参加述职&#xff0c;公司领导班子出席会议。 本次述职采取了现场汇报点评的…

数字滚动动画~

前言 数字从0.00滚动到某个数值的动画 实现&#xff08;React版本&#xff09; Dom <div className"number" ref{numberRef}>0.00</div> JS const _initNumber () > {const targetNumber 15454547.69;const duration 1500;const numberElement…

【UML用户指南】-33-对体系结构建模-系统和模型

目录 1、系统和子系统 2、模型和视图 3、跟踪 4、常用建模技术 4.1、对系统的体系结构建模 4.2、对系统的系统建模 模型是对现实世界的简化——即对系统的抽象&#xff0c;建立模型的目的是为了更好地理解系统。 1、系统和子系统 一个系统可能被分解成一组子系统&#…

09.C2W4.Word Embeddings with Neural Networks

往期文章请点这里 目录 OverviewBasic Word RepresentationsIntegersOne-hot vectors Word EmbeddingsMeaning as vectorsWord embedding vectors Word embedding processWord Embedding MethodsBasic word embedding methodsAdvanced word embedding methods Continuous Bag-…

esp32硬件电路设计

ESP-IDF 入门指南 | 乐鑫科技 (espressif.com) ESP32-DevKitC V4 入门指南 - ESP32 - — ESP-IDF 编程指南 v5.1 文档 (espressif.com)

每日一题~abc356(对于一串连续数字 找规律)

添加链接描述 题意&#xff1a;对于给定的n,m 。计算0~n 每一个数和m & 之后&#xff0c;得到的数 的二进制中 1的个数的和。 一位一位的算。最多是60位。 我们只需要计算 在 1-n这些数上&#xff0c;有多少个数 第i位 为1. 因为是连续的自然数&#xff0c;每一位上1 的…