作业/数据结构/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;                                           
}

 

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

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

相关文章

OpenGL3.3_C++_Windows(29)

Demo exposure 0.1f exposure 5.0f HDR色调映射 问题&#xff1a;有多个亮光源使这些数值总和超过了1.0&#xff0c;颜色值会被约束在1.0&#xff0c;从而导致场景混成一片&#xff0c;难以分辨&#xff1a;色调映射&#xff1a;用更大范围的颜色值渲染从而获取大范围的黑暗…

手搓前端day1

断断续续的学了些前端&#xff0c;今天开始写写代码&#xff0c;就当是记录一下自己前端的成长过程 效果&#xff1a; 写了点css&#xff0c;实现了简单的前端页面的跳转 文件目录 代码如下&#xff1a; styles.css body{margin: 0;padding: 0;}header{background-color: bl…

从0-1搭建一个web项目(路由目录分析)详解

本章分析vue路由目录文件详解 ObJack-Admin一款基于 Vue3.3、TypeScript、Vite3、Pinia、Element-Plus 开源的后台管理框架。在一定程度上节省您的开发效率。另外本项目还封装了一些常用组件、hooks、指令、动态路由、按钮级别权限控制等功能。感兴趣的小伙伴可以访问源码点个赞…

vue前端实现导出页面为word(两种方法)

将vue页面导出为word文档&#xff0c;不用写模板&#xff0c;直接导出即可。 第一种方法(简单版) 第一步&#xff1a;安装所需依赖 npm install html-docx-js -S npm install file-saver -S第二步&#xff1a;创建容器&#xff0c;页面使用方法 注意&#xff1a;在当前页面引…

对于多个表多个字段进行查询、F12查看网页的返回数据帮助开发、数据库的各种查询方式(多对多、多表查询、子查询等)。

对于多个表多个字段进行查询、F12查看网页的返回数据帮助开发、数据库的各种查询方式&#xff08;多对多、多表查询、子查询等&#xff09;。 一、 前端界面需要展现多个表的其中几个数据的多表查询。1. 三个表查询其中字段返回&#xff1a;&#xff08;用一下sql语句&#xff…

论文翻译 | (TAKE A STEP BACK) 后退一步:在大型语言模型中通过抽象来调用推理

摘要 我们介绍了STEP-BACK提示&#xff0c;这是一种简单的提示技术&#xff0c;使LLM能够进行抽象&#xff0c;从而从包含特定细节的实例中派生高级概念和第一原则。使用概念和原则来指导推理&#xff0c;LLM显着提高了他们遵循正确推理路径的能力。我们使用PaLM-2L、GPT-4和Ll…

3102.力扣每日一题7/9 Java(TreeMap)

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;算法练习关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 目录 TreeMap详解 解题思路 解题方法 时间复杂度 空间复杂度 Code T…

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

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

【读点论文】ASAM: Boosting Segment Anything Model with Adversarial Tuning,对抗学习提升性能

ASAM: Boosting Segment Anything Model with Adversarial Tuning Abstract 在不断发展的计算机视觉领域&#xff0c;基础模型已成为关键工具&#xff0c;对各种任务表现出卓越的适应性。其中&#xff0c;Meta AI 的 Segment Anything Model (SAM) 在图像分割方面表现突出。然…

国内从事人机交互的团队——浙江工业大学

一、背景 当我们选择一个新的课题后&#xff0c;需要清楚的了解从事该方向的团队都有哪些&#xff0c;这样可以及时跟踪和学习大牛团队的最新进展&#xff0c;以免自己认为的good idea&#xff0c;其实早就已经研究过了。 随着人形机器人的发展&#xff0c;机器人不仅需要在无…

vscode使用Git的常用操作

主打一个实用 查看此篇之前请先保证电脑安装了Git&#xff0c;安装教程很多&#xff0c;可自行搜索 一.初始化本地仓库&#x1f7e2; 使用vscode打开项目文件夹如图所使初始化仓库&#xff0c;相当于命令行的git init 二.提交到暂存区&#x1f7e2; 三.提交到新版本&#x1f…

python04——类(基础new)

类其实也是一种封装的思想&#xff0c;类就是把变量、方法等封装在一起&#xff0c;然后可以通过不同的实例化对其进行调用操作。 1.类的定义 class 类名&#xff1a; 变量a def __init__ (self,参数2&#xff0c;参数2...)&#xff1a;初始化函数&#xff01;&#xff01;&…

Chromium编译指南2024 Linux篇-编译Chromium(五)

1.引言 在完成环境配置之后&#xff0c;我们需要开始实际的编译工作。编译 Chromium 是一个相对复杂且耗时的过程&#xff0c;尤其是第一次编译时。为了保证顺利完成&#xff0c;我们将使用 GN 和 Ninja 工具来生成和管理构建文件。接下来&#xff0c;我们会详细介绍如何生成构…

最新 Kubernetes 集群部署 + flannel 网络插件(保姆级教程,最新 K8S 版本)

资源列表 操作系统配置主机名IP所需插件CentOS 7.92C4Gk8s-master192.168.60.143flannel-cni-plugin、flannel、coredns、etcd、kube-apiserver、kube-controller-manager、kube-proxy、 kube-scheduler 、containerd、pause 、crictlCentOS 7.92C4Gk8s-node01192.168.60.144f…

【HarmonyOS】关于官方推荐的组件级路由Navigation的心得体会

前言 最近因为之前的630版本有点忙&#xff0c;导致断更了几天&#xff0c;现在再补上。换换脑子。 目前内测系统的华为应用市场&#xff0c;各种顶级APP陆续都放出来beta版本了&#xff0c;大体上都完成了主流程的开发。欣欣向荣的气息。 学习思路 关于学习HarmonyOS的问题…

浅谈化工厂环保管理的痛点、智慧环保的必要性及EHS系统的实现路径

在全球环保意识日益增强的背景下&#xff0c;化工厂作为工业领域的重要组成部分&#xff0c;其环保管理显得尤为重要。然而&#xff0c;化工厂在追求经济效益的同时&#xff0c;也面临着诸多环保管理的痛点。本文将围绕化工厂环保管理的痛点、化工厂为何需要智慧环保以及如何借…

Unity【入门】场景切换和游戏退出及准备

1、必备知识点场景切换和游戏退出 文章目录 1、必备知识点场景切换和游戏退出1、场景切换2、鼠标隐藏锁定相关3、随机数和自带委托4、模型资源的导入1、模型由什么构成2、Unity支持的模型格式3、如何指导美术同学导出模型4、学习阶段在哪里获取模型资源 2、小项目准备工作需求分…

小程序内容管理系统设计

设计一个小程序内容管理系统&#xff08;CMS&#xff09;时&#xff0c;需要考虑以下几个关键方面来确保其功能完善、用户友好且高效&#xff1a; 1. 需求分析 目标用户&#xff1a;明确你的目标用户群体&#xff0c;比如企业、媒体、个人博主等&#xff0c;这将决定系统的功…

Linux基础知识(十六)shell脚本编程

一、简介 用户通过shell向计算机发送指令计算机通过shell给用户返回指令的执行结果 1.1 通过shell编程可以达到的效果 提高工作效率可以实现自动化 1.2 需要学习的内容 Linuxshell的语法规范 1.3 编写shell的流程 第一步&#xff1a;用vi/vim创建一个.sh的文件第二步&am…

C++ 重载运算符 addition (+), subtraction (-) and multiplication (*)

C 重载运算符 addition , subtraction - and multiplication * 1. Operator Overloading (运算符重载)2. Developing an Operator Overloading Example2.1. Adding an Addition Operator (添加加法运算符)2.2. Overloading Restrictions (重载限制)2.3. 重载运算符 - 和 * Refe…