作业帮 > 语文 > 作业

数据结构中队列和指针的一个问题

来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:语文作业 时间:2024/05/17 02:53:15
数据结构中队列和指针的一个问题
for(p=&Q.front,q=&Q.rear;*p!=*q&&total>m;p++){ //p,q为指针
Dequeue(Q,ee);//(1)
……//(2)
}
如上,我想用p指到队首,q指到对尾,然后进行了(1)的操作,Q.front就变了,那p的指向是不是会随着Q.front改变呢?如果变了怎么让p的指向不变?
又或者如果我不想改变p的指向,我(2)处会对队列中的元素依次处理,(不一定用for语句)
数据结构中队列和指针的一个问题
你的题目的本意是想干什么?对队列的操作,已经有了front和rear指针,你为什么还要p和q指针?
再问: 题目本意就是:比如队有10个元素 我从队首开始检查 如果需要处理 就出队列 不需要处理 重新排到队尾
再答: 那你是在对线性链表进行操作,则你用线性链表去实现,队列是一种操作受限的结构,访问时只能访问队首元素,删除时也只能删除队首元素,进队时只能插入到队尾。不能破坏这种规则,否则它就不是队列。所以你想从队首开始进行检查本身就是一种违规操作,如果你要坚持这样做,那你就不要用队列,而用单链表。
再问: 我就是这个意思 要处理的就删除队首元素 不要处理的要出队再排到队尾 但是我用我写的那两句语句时 出现了一个差错 我队里有两个元素 都满足处理要求 所以都要出队 但是第一个出队后 第二个就不出队了 😭
再答: 我明白你的意思了,你是想清理队列,将队列中的垃圾清理出去,如果是这样,则需要用到一个辅助队列,不用辅助队列是较难实现的,因为如果你不借助辅助队列,而直接将刚出队的有用元素又直接插入到队尾,则你的循环是很难终止的(因为队列永远都不会空,你的检测就将永不停息)。而借助辅助队列,可如下实现,设要清理的队列为queue, 辅助队列为queue2。 InitQueue(queue2); while(!IsEmpty(queue)){ DeQueue(queue, e); if(e is not rubbish) EnQueue(queue2, e); } while(!IsEmpty(queue2)){ DeQueue(queue2, e); EnQueue(queue, e); }