欢迎来到天天文库
浏览记录
ID:39585026
大小:36.00 KB
页数:8页
时间:2019-07-06
《链队列存储结构及常见操作》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、/*~~~~~~~~~~~~~~~~~~~链队列存储结构及常见操作(lkqueue.c)~~~~~~~~~~~~~*/#ifndef__LINKQUEUE__#define__LINKQUEUE__#include/*链队列存储结构类型定义*/typedefstructlkqenode{QueueDTdata;structlkqenode*next;}QNode,*QLink;typedefstruct{//QLinkfront;QLinkrear;intlen;}LinkQueue;/*链队列初始化*/vo
2、idQueueInitialize(LinkQueue*pQ){pQ->rear=(QLink)malloc(sizeof(QNode));if(!pQ->rear)exit(EXIT_FAILURE);pQ->rear->next=pQ->rear;pQ->len=0;}/*求链队列长度*/intQueueLen(LinkQueueQ){returnQ.len;}/*判断链队列是否为空*/BOOLQueueEmpty(LinkQueueQ){/*也可用:returnQ.rear==Q.rear->next?TRUE:FALSE
3、;*/return0==Q.len?TRUE:FALSE;}/*链队列入队列操作*/voidEnQueue(LinkQueue*pQ,QueueDTd){QLinkp;p=(QLink)malloc(sizeof(QNode));if(!p)exit(EXIT_FAILURE);p->data=d;p->next=pQ->rear->next;//1pQ->rear->next=p;//2pQ->rear=p;//3pQ->len++;//4}/*链队列出队列操作*/BOOLDeQueue(LinkQueue*pQ,QueueD
4、T*pd){BOOLflg=TRUE;QLinkp,front;if(QueueEmpty(*pQ))flg=FALSE;else{front=pQ->rear->next;p=front->next;front->next=p->next;*pd=p->data;if(pQ->rear==p)pQ->rear=front;free(p);pQ->len--;}returnflg;}/*取链队列队首元素*/BOOLQueueHead(LinkQueueQ,QueueDT*pd){BOOLflg=TRUE;if(QueueEmpt
5、y(Q))flg=FALSE;else*pd=Q.rear->next->next->data;returnflg;}/*清空链队列*/voidQueueClear(LinkQueue*pQ){QLinkp,q,head;if(pQ->len>0){head=pQ->rear->next;pQ->rear=head;p=head->next;head->next=head;pQ->len=0;while(p!=head){q=p;p=p->next;free(q);}}}/*销毁链队列*/voidQueueDestroy(Lin
6、kQueueQ){QueueClear(&Q);free(Q.rear);}#endif/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*//*建议性测试用程序*/typedefenum{TRUE=1,FALSE=0}BOOL;typedefintQueueDT;#include"lkqueue.c"#defineN10voidmain(){inti;QueueDTd,a[N]={0,1,2,3,4,5,6,7,8,9};LinkQueuequeue;Qu
7、eueInitialize(&queue);printf("EnQueue:");for(i=0;i8、3d",d);}printf("Queueis%s.",QueueEmpty(queue)?"empty":"notempty");QueueDestroy(queue);}
8、3d",d);}printf("Queueis%s.",QueueEmpty(queue)?"empty":"notempty");QueueDestroy(queue);}
此文档下载收益归作者所有