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

来源:互联网 发布:人工智能 教育风口 编辑:程序博客网 时间:2024/06/08 04:00
/*         * Copyright (c) 2017,烟台大学计算机学院         * All right reserved.         * 文件名称:main.cpp        * 作者:王华慧         * 完成日期:2017年10月24日         * 版本号:v1.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_INCLUDE

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;}

main.cpp 存放函数主函数


#include <stdio.h>  #include "liqueue.h" #include  <iostream>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");elseprintf("(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);system("pause");return 0;}

运行结果



原创粉丝点击