Title: Q[n]? ??? ?? ??
1?? ?? ??(1)
- 1?? ??
- ?? ???? ?? ??? ??
- Qn? ??? ?? ??
- ?? ??? ?? ??
- n ?? ??? ? ?? ?? ?? ?
- ? ??? ?? front, rear
- ??? front rear -1 (???)
- ??? front rear
- ?? rear n-1
2?? ?? ??(2)
createQ() // ?? ?(q)? ?? qn
front ? -1 // ??? rear ? -1 end
createQ() isEmpty(q) // ?(q)? ????? ??
if (front rear) then return true else
return false end isEmpty() enqueue(q, item)
// ?(q)? ??? ?? if (rearn-1) then
queueFull() // ?(q)? ??? ??? ?? rear ? rear
1 qrear ? item end enqueue()
3?? ?? ??(3)
dequeue(q) // ?(q)?? ??? ???? ??
if (isEmpty(q)) then queueEmpty() // ?(q)? ???
??? ?? else front ? front 1
return qfront end dequeue() delete(q)
// ?(q)?? ??? ?? if (isEmpty(q))
then queueEmpty() // ?(q)? ??? ??? ?? front
? front 1 end delete() peek(q) //
?(q)?? ??? ?? if (isEmpty(q)) then
queueEmpty() // ?(q)? ??? ??? ?? else
return qfront1 end peek()
4?? ?? ??(4)
- ?? ??? ???
- Rearn-1? ??
- ?????, ??? n?? ??? ?? ??? ??
- ?? ??? ??? ?? ? ??? ?? ? ??
- ???? ??? ?? ???? ??, front?rear ???
- ? ??, ??? ?? ??
- ??? ?? ??? ??
- ??? ??? ???? ?
- ?? ?(circular queue)
- ?? ??? ??? ?? ?? ?? Qn? ???? ??
- ?? ?? ??
- ??? front rear 0 (???)
- ??? front rear
- ?? ?? rear? ?? ?????, ? ??? ?? ??
- ?? rear? ?? ????? ?, rear front
- (?? front ?? ??? ???, ??? ?? ? ??? ??)
5?? ?? ??(5)
- ?? ?? ?? ??
- 1?? ??? ???? ???? ??
- mod(modulus) ??? ??
- ??? ?? ?? rear? ???? ? rear ? (rear1) mod n
- rear ?? n-1 ??? n? ?? ??, ?? 0?? ????
- ??? ?? front? ???? ? front ? (front1) mod n
- rear? ?????, front ?? n-1 ??? 0? ?? ???? ??
front 0 rear 2
(b) 2?? ?? ??
6?? ?? ??(6)
- ?? ???? enqueue? dequeue ??
enqueue(q, item) // ?? ?(q)? item? ??
rear ? (rear1) mod n // ?? ?(q) ??? if
(front rear) then queueFull() // ?(q)? ???
??? ?? qrear ? item end enqueue() dequeue(q
) // ?? ?(q)?? ??? ???? ?? if (front
rear) then queueEmpty() // ?(q)? ??? ??? ??
else front ? (front1) mod n // ?? ???
return qfront end dequeue()
7??? ??? ?? ??(1)
- ? ADT? ?? ??
- Java?? ???? interface ???? ?? ??? ?
- ?? ?? ???? ???? ???? ??
- Queue interface ??
public interface Queue boolean isEmpty()
// ?? ????? ?? void enqueue(Object x)
// ?? x? ?? Object dequeue() // ???
???? ?? void remove() // ??? ??
Object peek() // ???? ??
8??? ??? ?? ??(2)
- ??? ???? ?? ?? ???? ArrayQueue ??? ??(1)
public class ArrayQueue implements Queue
// ??? ??? Queue interface? ??
private int front // ?? ?? ?? private int
rear // ?? ?? ?? private int count // ?? ??
? private int queueSize // ?(??)? ??
private int increment // ??? ?? ?? private
Object itemArray // Java ?? ??? ? ??? ?? ??
public ArrayQueue() // ??? ?
??? front 0 // ??? rear 0
count 0 queueSize 50 // ?? ? ??
increment 10 // ??? ?? ?? itemArray
new ObjectqueueSize public boolean
isEmpty() return (count 0)
9??? ??? ?? ??(3)
- ??? ???? ?? ?? ???? ArrayQueue ??? ??(2)
public void enqueue(Object x)
// ?? ?? x? ?? if (count queueSize)
queueFull() itemArrayrear x // ???
?? rear (rear 1) queueSize
count // end enqueue( ) public void
queueFull() // ??? ????
increment?? ?? int oldsize queueSize //
??? ?? ??? ?? queueSize increment //
??? ?? ?? Object tempArray new
ObjectqueueSize //?????????? for (int i
0 i lt count i) // ?? ??? ????
??? ?? tempArrayi
itemArrayfront front (front 1)
oldsize itemArray tempArray //
?? ?? ??? ?? front 0 rear
count // end queueFull()
10??? ??? ?? ??(4)
- ??? ???? ?? ?? ???? ArrayQueue ??? ??(3)
public Object dequeue( )// ??? ??? ???? ??
if (isEmpty()) return null // ?? ??? ??
// ?? ??? ?? ?? Object item
itemArrayfront front (front 1)
queueSize count -- return item
//end dequeue() public Object remove( )//
??? ??? ?? if (isEmpty()) return null //
?? ??? ?? // ?? ??? ?? ??
front (front 1) queueSize count
-- //end remove() public Object
peek( ) // ??? ???? ?? if (isEmpty())
return null else return itemArrayfront
// end peek() //end ArrayQueue class
116.4 ?? ?? ??(1)
- ?????? ??? ?
- ?? ?? ?? ??? ??? ?? ??? ???
- ?? ?(linked queue)? ??
- ?? ?? ???? ? ?? ??? ?? front, rear? ??
- ??? front rear null (???)
- ?? ?? ?? front ?? rear? null?? ??? ?? ? ? ??
12?? ?? ??(2)
- ?? ???? ??, ??, ?? ?? ??(1)
enqueue(q, item) // ?? ?(q)? item? ??
newNode ? getNode() // ??? ??? ??
newNode.data ? item newNode.link ? null
// ???? ??? link ??? ?? null if (rear null)
then // ?(q)? ??? ?? rear ? newNode
front ? newNode else
rear.link ? newNode rear ? newNode
end enqueue() dequeue(q) // ?(q)??
??? ???? ?? ?? if (front null) then
queueEmpty() // ?(q)? ??? ?? else
oldNode ? front item ? front.data
front ? front.link if (front null)
then rear ? null // ??? ?? ?(q)? ??? ? ??
retNode(oldNode) return item
end dequeue()
13?? ?? ??(3)
- ?? ???? ??, ??, ?? ?? ??(2)
delete(q) // ?(q)?? ??? ?? if (front
null) then queueEmpty() // ?(q)? ??? ??
else oldNode ? front front ?
front.link if(front null) then rear ?
null // ??? ?? ?(q)? ??? ? ??
retNode(oldNode) end delete() peek(q)
// ?(q)? front ??? ?? if (front null)
then queueEmpty() // ?(q)? ??? ?? else
return (front.data) end peek()
14?? ?? ??(4)
- ???? ??
- ??, ??? ?? ?? ???? ??? ?? ??
- ??? ???? ??
- ?? ?? ? ????? ??? ??
- ?? ??? ???? ???? ?? ?? ??
- k?? ?? ??
- ?0, ?1, ?2,