首页天道酬勤简要叙述循环队列的数据结构,数据结构拓扑排序

简要叙述循环队列的数据结构,数据结构拓扑排序

张世龙 05-06 11:50 131次浏览

1 .类型宣言

typedefstructcqueue { structs lnode * front; struct SLnode* tail; } c队列; 类型结构sl node { int date; 结构sl node * next; } SL节点; 2 .创建节点

slnode*buyslnode({slnode*node=) sl node * (malloc ) sizeof (sl node ) }; if(node==null ) printf(failedtoopenupcapacity ); }节点日期=0; 节点- next=null; 返回节点; } 3.类型声明

cqueue*cqueueinit(intk ) c queue * pq=(c queue * ) malloc ) sizeof (c queue ); if(pq==null ) printf(failedtoopenupcapacity ); }SLnode*plist=BuySLnode (; SLnode*p=plist; for(intI=0; i k; I ) {p-next=BuySLnode (; p=p-next; (}p-next=plist; p=空值; //不再使用指针p的空pq-front=pq-tail=plist; 返回pq; 将循环单链表配置为使CQueue-tail和CQueue-front指向循环单链表的第一个节点。 因为不能根据需要的申请空间判断空与满,所以需要申请更多的空间。 (不存储数据。 )

4 .审判天空

intcqueueisempty(cqueue*pq ) {返回pq-front==pq-tail? 1 : 0; )5.判定已满

intcqueueisfull(cqueue*pq ) {SLnode*tailnext=pq-tail-next; 返回tail next==pq-front? 1 : 0; (6.入队

voidcqueuepush(cqueue*pq,int value ) if (cqueueisfull ) pq ) {return; }else{pq-tail-date=value; pq-tail=pq-tail-next; (7.离开队伍

voidcqueuepop(cqueue*pq ) if (cqueueisempty ) pq ) {return; }else{pq-front=pq-front-next; }8.获取团队开头的数据

intcqueuefront(cqueue*pq ) if (cqueueisempty ) pq ) {return -1; }返回Pq -前端日期; }对于空队,返回-1。

9 .获取团队的最后数据

intcqueuetail(cqueue*pq ) if (cqueueisempty ) pq ) {return -1; }SLnode*cur=pq-front; wile(cur-next!=pq-tail ) {cur=cur-next; }返回日期; }要获取团队的最后数据,必须找到tail之前的位置。 不是返回日期

10 .队列长度

intcqueuelength(cqueue*pq ) {SLnode*cur=pq-front; int size=0; wile(cur!=pq-tail ) {cur=cur-next; size; }返回大小; (11 )打印)为了更好地测试各个接口() ) ) ) ) ) ) ) ) )。

语音打印(c queue * pq ) {SLnode*cur=pq-front; wile(cur!=pq-tail () printf )、cur-date ); cur=cur-next; }printf((n ); (11 .清空

voidcqueuedestory(cqueue*pq ) {SLnode*cur=pq-front; wile(cur!=pq-tail(SLnode*next=cur-next; 自由(Cur; cur=next; (自由) cur; pq-front=pq-tail=NULL; free(pq ); pq=空值; }请注意,这里传达的是一级指南。

12 .测试

test () /测试入伙CQueue*cq=CQueueInit(5) 5; cqueuepush(CQ,2; cqueuepush(CQ,3 ); cqueuepush(CQ,4; cqueuepush(CQ,5; cqueuepush(CQ,6 ); cqueuepush(CQ,7 ); 打印(CQ ); //测试外团队cqueuepop(CQ ); cqueuepop(CQ; 打印(CQ ); //获取头部数据的printf(-\n )、cqueuefront () CQ ); //取得对尾的数据printf(-\n )、cqueuetail () CQ ) ); //队列长度,即有效数据的数量printf(-\n )、cqueuelength ) ) CQ ); //再次打印打印(CQ ); //释放空间cqueuedestory(CQ ); cq=NULL; }由于传递的是一级指针,所以在CQueueDestory中,即使是free(pq ),在主函数queue ) CQ中也是野指针,因此需要cq=NULL。

13 .测试结果

单链表模拟实现循环队列的基本操作在此共享。 感谢您的阅读。 如果对你有用的话,称赞一下,顺便关注一下。

下一期将发表关于与双向链表的基本操作的文章。

循环队列是顺序存储结构,数据结构希尔排序