评分标准模式
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"orPRINT "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 ItemorOUTPUT Item- Must be in the success branch
A1 — Output empty message (1 mark)
OUTPUT "Queue is empty"orRETURN ""/RETURN Null- Must be in the failure branch
常见扣分点
| Mistake | Marks 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.