首页 > 学院 > 开发设计 > 正文

队列之链式队列基本操作

2019-11-11 05:19:01
字体:
来源:转载
供稿:网友
/*  队列的链式存储结构也是通过由节点构成的单链表实现的,此时只能在  表首进行删除操作,在表尾进行插入操作。*/#include <stdio.h>#include <stdlib.h>typedef char ElemType;//链队中数据节点的类型QNode定义typedef struct qnode{    ElemType data;    struct qnode *next;}QNode;//链队节点的类型LiQueue定义如下typedef struct{    QNode *front;    QNode *rear;}LiQueue;void InitQueue(LiQueue *&q)//初始化{    q = (LiQueue *)malloc(sizeof(LiQueue));    q->front=q->rear=NULL;}void DestroyQueue(LiQueue *&q)//销毁{    QNode *p,*r;    p=q->front;    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->next=NULL;    p->data=e;    if(q->rear==NULL)//队为空的情况        q->front=q->rear=p;    else    {        q->rear->next=p;        q->rear=p;    }}bool deQueue(LiQueue *&q,ElemType &e)//出队{    QNode *p;    if(q->rear==NULL)        return false;    else//元素不为空时    {        p=q->front;        if(p->next==NULL)//当只有一个元素时            q->front=q->rear=NULL;        else//有多个元素时        {            q->front=p->next;        }        e=p->data;        free(p);        return true ;    }}int main(){	ElemType e;	LiQueue *q;	PRintf("链队的基本运算如下:/n");	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("/t提示:队空,不能出队/n");	else		printf("  (4)出队一个元素%c/n",e);	printf("  (5)依次进链队元素d,e,f/n");	enQueue(q,'d');	enQueue(q,'e');	enQueue(q,'f');	printf("  (6)出链队序列:");	while (!QueueEmpty(q))	{	deQueue(q,e);		printf("%c ",e);	}	printf("/n");	printf("  (7)释放链队/n");	DestroyQueue(q);    return 0;}

运行结果:


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表