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

来源:互联网 发布:网络侵权管辖法院 编辑:程序博客网 时间:2024/06/18 15:32

问题及代码:

/    烟台大学计控学院   作    者:房斐完成日期:2016.10.7 问题描述:定义链队存储结构,实现其基本运算,并完成测试。    /

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 "liqueue.h"#include <stdio.h>#include <malloc.h>void InitQueue(LiQueue *&q)  //初始化链队   {q=(LiQueue *)malloc(sizeof(LiQueue));q->front=q->rear=NULL;}void DestroyQueue(LiQueue *&q)  //销毁链队 {QNode *p=q->front,*r;  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);}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;q->rear=p; }}bool deQueue(LiQueue *&q,ElemType &e)   //出队    {QNode *t;if(q->rear==NULL)return false ;t=q->front;if(q->front==q->rear)q->front=q->rear=NULL;else q->front=q->front->next;e=t->data;free(t);return true;}int QueueLength(LiQueue *q) //返回队列中数据元素个数    {int n=0;QNode *p=q->front; while(p!=NULL) { n++; p=p->next; } return (n);}


main.cpp

#include"liqueue.h"    #include<stdio.h>    #include<malloc.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;    }    


运行结果:

知识点总结:

队列的链式存储和基本运算

0 0
原创粉丝点击