2026/5/29 23:59:33
网站建设
项目流程
网站服务器 重启,开挂辅助器,163网易免费邮箱,主题店铺网页界面设计队列是限制在两端进行插入操作和删除操作的线性表允许进行存入操作的一端称为“队尾”允许进行删除操作的一端称为“队头”当线性表中没有元素时#xff0c;称为“空队”特点 #xff1a;先进先出#xff08;FIFO#xff09;或后进后出普通队列的缺点#xff1a;
出队后前…队列是限制在两端进行插入操作和删除操作的线性表允许进行存入操作的一端称为“队尾”允许进行删除操作的一端称为“队头”当线性表中没有元素时称为“空队”特点 先进先出FIFO或后进后出普通队列的缺点出队后前面的空间无法重用会造成“假溢出”当 sq-front 0 且 sq-rear N 时虽然数组前面有空位但队列已满在实际应用中循环队列是更高效的选择因为它避免了元素的移动空间利用率更高。普通队列的主要缺点是空间浪费或需要移动元素的开销功能实现#includestdio.h#includestdlib.h#includestring.hsequeue*queue_create(){sequeue*sq;if((sq(sequeue*)malloc(sizeof(sequeue)))NULL){printf(malloc failed\n);returnNULL;}memset(sq-data,0,sizeof(sq-data));sq-frontsq-rear0;returnsq;}intenqueue(sequeue*sq,datatype x){if(sqNULL){printf(sq is NULL\n);return-1;}if(sq-rearN){printf(sequeue is full\n);return-1;}sq-data[sq-rear]x;sq-rear;return0;}datatypedequeue(sequeue*sq){datatype ret;if(sqNULL||sq-frontsq-rear){printf(queue is empty or NULL\n);return(datatype)-1;}retsq-data[sq-front];sq-front;// 可选:当队列为空时重置指针以重用空间if(sq-frontsq-rear){sq-frontsq-rear0;}returnret;}intqueue_empty(sequeue*sq){if(sqNULL){printf(sq is NULL\n);return-1;}return(sq-frontsq-rear?1:0);}intqueue_full(sequeue*sq){if(sqNULL){printf(sq is NULL\n);return-1;}return(sq-rearN?1:0);}intqueue_clear(sequeue*sq){if(sqNULL){printf(sq is NULL\n);return-1;}sq-frontsq-rear0;return0;}sequeue*queue_free(sequeue*sq){if(sqNULL){printf(sq is NULL\n);returnNULL;}free(sq);returnNULL;}intqueue_length(sequeue*sq){if(sqNULL){return-1;}returnsq-rear-sq-front;}头文件#defineN100// 队列最大容量typedefintdatatype;// 数据类型typedefstruct{datatype data[N];// 存储队列元素intfront;// 队头指针intrear;// 队尾指针}sequeue;sequeue*queue_create();intenqueue(sequeue*sq,datatype x);datatypedequeue(sequeue*sq);intqueue_empty(sequeue*sq);intqueue_full(sequeue*sq);intqueue_clear(sequeue*sq);sequeue*queue_free(sequeue*sq);intqueue_length(sequeue*sq);测试文件#includestdio.h#includesequeue.hintmain(intargc,constchar*argv[]){sequeue*sq;if((sqqueue_create())NULL){return-1;}enqueue(sq,10);enqueue(sq,100);enqueue(sq,1000);while(!queue_empty(sq)){printf(dequeue:%d\n,dequeue(sq));}queue_free(sq);return0;}