问答题 假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针,请写出相应的入队列和出队列算法。【华东师范大学2000年】【苏州大学2002年】
【正确答案】正确答案:算法的基本设计思想:入队操作即在循环链表的尾部插入一个结点,出队操作即在循环链表的头结点后删除一个结点。算法的代码: 1) void EnQueue(LinkedLiSt&rear,ElemType X){ //rear是带头结点的循环链队列的尾指针,本算法将元素x插入到队尾 S=(LinkedLiSt)malloc(Si zeof(LNode)); //申请结点空间 S一>data=x ; s一>next=rear一>next; //将S结点链入队尾 rear一>next=S: rear=s; //rear指向新队尾 } 2) VOid DeQueue(LinkedLiSt& rear){ //rear是带头结点的循环链队列的尾指针,本算法执行出队操作,操作成功输出队头元素;否则 //给出出错信息 if(rear一>neXt=:rear){ printf(”队空\n”); exit(1), } s=rear一>next一>next; //S指向队头元素 rear一>next一>next=S一>next; //队头元素出队 printf("出队元素是%d",S->data); if(S==rear) rear=rear->nextj //空队列 free(s); }
【答案解析】