链队列的结构及其操作

来源:互联网 发布:苹果双系统删除windows 编辑:程序博客网 时间:2024/05/18 00:22
/** * *作者:LinX   2017-6-16-上午   * *内容:链队列的结构及其应用  * *看严蔚敏教材上的图解,就很清晰  */#include <stdio.h> #include <stdlib.h>typedef int ElemType;typedef struct QNode{ElemType data;struct QNode *next;}QNode,*QueuePtr;typedef struct{QueuePtr front;QueuePtr rear;}LinkQueue;/*基本操作*/LinkQueue* initQueue();//初始化链队列void EnQue(LinkQueue *Q,ElemType e);//入队ElemType DeQue(LinkQueue *Q);//出队int isEmpty(LinkQueue *Q);//判空void printQue(LinkQueue *Q);//输出队列 int main(){LinkQueue *Q=initQueue();EnQue(Q,1);EnQue(Q,2);EnQue(Q,3);printQue(Q);DeQue(Q);DeQue(Q);DeQue(Q);printQue(Q);DeQue(Q);return 0;}/*初始化链队列*/LinkQueue* initQueue(){LinkQueue *Q=(LinkQueue*)malloc(sizeof(LinkQueue));//两个指针同时指向一个节点 Q->front=(QueuePtr *)malloc(sizeof(QueuePtr));Q->rear=Q->front;Q->front->next=NULL;return Q;}/*出队*/ElemType DeQue(LinkQueue *Q){int e;if(isEmpty(Q)==1){return 0;}QNode *p=Q->front->next;Q->front->next=p->next;//这里需要注意:如果出队的是最后一个元素,那么尾指针需要调整指向 if(Q->rear==p){//printf("sss");Q->front->next=NULL;Q->rear=Q->front;}e=p->data;free(p);return e;} /*入队*/void EnQue(LinkQueue *Q,ElemType e){QNode *s=(QNode*)malloc(sizeof(QNode));s->data=e;Q->rear->next=s;Q->rear=s;s->next=NULL;}/*打印链队列*/void printQue(LinkQueue *Q){QNode *p;p=Q->front->next;while(p!=NULL){printf("%d ",p->data);p=p->next;}printf("\n");}int isEmpty(LinkQueue *Q){if(Q->front==Q->rear){printf("\n队空\n");return 1;}return 0;}

原创粉丝点击