当前位置 : 主页 > 编程语言 > java >

队列之链式队列基本操作

来源:互联网 收集:自由互联 发布时间:2023-02-04
/* 队列的链式存储结构也是通过由节点构成的单链表实现的,此时只能在 表首进行删除操作,在表尾进行插入操作。*/#include stdio.h#include stdlib.htypedef char ElemType;//链队中数据节点的类型

/* 队列的链式存储结构也是通过由节点构成的单链表实现的,此时只能在 表首进行删除操作,在表尾进行插入操作。*/#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;}

运行结果:

队列之链式队列基本操作_typedef

网友评论