第七周项目2---建立链队算法库

2023-11-09 17:11

本文主要是介绍第七周项目2---建立链队算法库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题及代码:

/*  
* 烟台大学计算机学院    
* 作    者:刘泽齐   
* 完成日期:2017 年 10 月 14 日   
*   
* 问题描述: 链队算法库采用程序的多文件组织形式,包括两个文件:   头文件:liqueue.h,包含定义链队数据结构的代码、宏定义、要实现算法的函数的声明  源文件:liqueue.cpp,包含实现各种算法的函数的定义   建立如上的两个文件,在同一项目(project)中再建立一个源文件(如main.cpp),编制main函数,完成相关的测试工作。   
* 输入描述:无需输入   
* 程序输出:实现各种算法的函数的测试结果   
*/  
main.cpp

#include <stdio.h>  
#include "liqueue.h"  int main()  
{  ElemType e;  LiQueue *q;  printf("(1)初始化链队q\n");  InitQueue(q);  printf("(2)依次进链队元素a,b,c\n");  enQueue(q,'a');  enQueue(q,'b');  enQueue(q,'c');  printf("(3)链队为%s\n",(QueueEmpty(q)?"空":"非空"));  if (deQueue(q,e)==0)  printf("队空,不能出队\n");  else  printf("(4)出队一个元素%c\n",e);  printf("(5)链队q的元素个数:%d\n",QueueLength(q));  printf("(6)依次进链队元素d,e,f\n");  enQueue(q,'d');  enQueue(q,'e');  enQueue(q,'f');  printf("(7)链队q的元素个数:%d\n",QueueLength(q));  printf("(8)出链队序列:");  while (!QueueEmpty(q))  {  deQueue(q,e);  printf("%c ",e);  }  printf("\n");  printf("(9)释放链队\n");  DestroyQueue(q);  return 0;  
}  
liqueue.h

#ifndef LIQUEUE_H_INCLUDED  
#define LIQUEUE_H_INCLUDED  typedef char ElemType;  
typedef struct qnode  
{  ElemType data;  struct qnode *next;  
} QNode;        //链队数据结点类型定义  typedef struct  
{  QNode *front;  QNode *rear;  
} LiQueue;          //链队类型定义  
void InitQueue(LiQueue *&q);  //初始化链队  
void DestroyQueue(LiQueue *&q);  //销毁链队  
bool QueueEmpty(LiQueue *q);  //判断链队是否为空  
int QueueLength(LiQueue *q);  //返回队列中数据元素个数  
void enQueue(LiQueue *&q,ElemType e);  //入队  
bool deQueue(LiQueue *&q,ElemType &e);   //出队  #endif // LIQUEUE_H_INCLUDED  


liqueue.cpp

#include <stdio.h>  
#include <malloc.h>  
#include "liqueue.h"  void InitQueue(LiQueue *&q)  //初始化链队  
{  q=(LiQueue *)malloc(sizeof(LiQueue));  q->front=q->rear=NULL;  
}  
void DestroyQueue(LiQueue *&q)  //销毁链队  
{  QNode *p=q->front,*r;   //p指向队头数据节点  if (p!=NULL)            //释放数据节点占用空间  {  r=p->next;  while (r!=NULL)  {  free(p);  p=r;  r=p->next;  }  }  free(p);  free(q);                //释放链队节点占用空间  
}  
bool QueueEmpty(LiQueue *q)  //判断链队是否为空  
{  return(q->rear==NULL);  
}  
int QueueLength(LiQueue *q)  //返回队列中数据元素个数  
{  int n=0;  QNode *p=q->front;  while (p!=NULL)  {  n++;  p=p->next;  }  return(n);  
}  
void enQueue(LiQueue *&q,ElemType e)  //入队  
{  QNode *p;  p=(QNode *)malloc(sizeof(QNode));  p->data=e;  p->next=NULL;  if (q->rear==NULL)      //若链队为空,则新节点是队首节点又是队尾节点  q->front=q->rear=p;  else  {  q->rear->next=p;    //将*p节点链到队尾,并将rear指向它  q->rear=p;  }  
}  
bool deQueue(LiQueue *&q,ElemType &e)   //出队  
{  QNode *t;  if (q->rear==NULL)      //队列为空  return false;  t=q->front;             //t指向第一个数据节点  if (q->front==q->rear)  //队列中只有一个节点时  q->front=q->rear=NULL;  else                    //队列中有多个节点时  q->front=q->front->next;  e=t->data;  free(t);  return true;  
}  


运行结果:

知识点总结:

这篇关于第七周项目2---建立链队算法库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/377478

相关文章

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶