跳到主要内容

评分标准模式


Enqueue 评分结构 (6 marks)

M1 — Check if full (1 mark)
  • IF NumberOfItems = QueueSize THEN
  • Accept: IF NumberOfItems >= QueueSize, IF TailPointer + 1 MOD = HeadPointer (rare)
  • Not accept: IF Queue[0] = None, IF HeadPointer = TailPointer
A1 — Wrap TailPointer (1 mark)
  • TailPointer ← (TailPointer + 1) MOD QueueSize
  • Must use MOD operator (not IF TailPointer = Size THEN TP = 0)
  • Must be executed when there is space
A1 — Assign item (1 mark)
  • Queue[TailPointer] ← NewItem
  • Variable name must match declaration
A1 — Increment counter (1 mark)
  • NumberOfItems ← NumberOfItems + 1
  • Must be after successful insertion
A1 — Output full message (1 mark)
  • OUTPUT "Queue is full" or PRINT "Queue is full"
  • Must be in the ELSE / failure branch
A1 — Structure (1 mark)
  • Correct ENDIF, ENDPROCEDURE
  • Parameter declared correctly (e.g. ByVal Item AS INTEGER)
  • No syntax errors

Dequeue 评分结构 (6 marks)

M1 — Check if empty (1 mark)
  • IF NumberOfItems > 0 THEN
  • Accept: IF NumberOfItems != 0, IF NOT IsEmpty()
  • Not accept: IF Queue[HeadPointer] = None
A1 — Wrap HeadPointer (1 mark)
  • HeadPointer ← (HeadPointer + 1) MOD QueueSize
  • Same MOD requirement as enqueue
A1 — Retrieve item (1 mark)
  • Item ← Queue[HeadPointer]
  • Must use the updated HeadPointer
A1 — Decrement counter (1 mark)
  • NumberOfItems ← NumberOfItems - 1
  • Must be after retrieval (otherwise index error)
A1 — Return item (1 mark)
  • RETURN Item or OUTPUT Item
  • Must be in the success branch
A1 — Output empty message (1 mark)
  • OUTPUT "Queue is empty" or RETURN "" / RETURN Null
  • Must be in the failure branch

常见扣分点

MistakeMarks Lost
No MOD operation (manual IF wrapping)−1
No NumberOfItems check (using pointer compare)−1 (M1)
Wrong MOD direction ((P - 1) MOD size)−1
NumberOfItems not incremented/decremented−1
MOD executed outside full check−1
Returning wrong variable−1
Missing ENDIF / ENDPROCEDURE−1

阅卷人提示

Examiners report that the most common error in circular queue questions is the confusion between full and empty states. A surprising number of candidates use HeadPointer == TailPointer to detect emptiness, which fails when the queue is full. Always use NumberOfItems.