第7週SHHデータ構造—【項目2-チームアルゴリズムライブラリの構築】
4076 ワード
/*
Copyright (c)2015,
All rights reserved.
: 2- .cbp
:
:2015 10 26
: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_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;
}
mainテスト関数
#include <stdio.h>
#include "liqueue.h"
int main()
{
ElemType e;
LiQueue *q;
printf("(1) q
");
InitQueue(q);
printf("(2) a,b,c
");
enQueue(q,'a');
enQueue(q,'b');
enQueue(q,'c');
printf("(3) %s
",(QueueEmpty(q)?" ":" "));
if (deQueue(q,e)==0)
printf(" ,
");
else
printf("(4) %c
",e);
printf("(5) q :%d
",QueueLength(q));
printf("(6) d,e,f
");
enQueue(q,'d');
enQueue(q,'e');
enQueue(q,'f');
printf("(7) q :%d
",QueueLength(q));
printf("(8) :");
while (!QueueEmpty(q))
{
deQueue(q,e);
printf("%c ",e);
}
printf("
");
printf("(9)
");
DestroyQueue(q);
return 0;
}
実行結果