第七周项目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项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下