Back to 课程

Computer-science_A-level_Cie

0% Complete
0/0 Steps
  1. computers-and-components
    6 主题
  2. logic-gates-and-logic-circuits
    2 主题
  3. central-processing-unit-cpu-architecture
    6 主题
  4. assembly-language-
    4 主题
  5. bit-manipulation
    1 主题
  6. operating-systems
    3 主题
  7. language-translators
    2 主题
  8. data-security
    3 主题
  9. data-integrity
    1 主题
  10. ethics-and-ownership
    3 主题
  11. database-concepts
    3 主题
  12. database-management-systems-dbms-
    1 主题
  13. data-definition-language-ddl-and-data-manipulation-language-dml
    1 主题
  14. computational-thinking-skills
    1 主题
  15. algorithms
    14 主题
  16. data-types-and-records
    2 主题
  17. arrays
    2 主题
  18. files
    1 主题
  19. introduction-to-abstract-data-types-adt
    1 主题
  20. programming-basics
    1 主题
  21. constructs
    2 主题
  22. structured-programming
    1 主题
  23. program-development-life-cycle
    2 主题
  24. program-design-
    2 主题
  25. program-testing-and-maintenance
    3 主题
  26. user-defined-data-types
    1 主题
  27. file-organisation-and-access-
    3 主题
  28. floating-point-numbers-representation-and-manipulation
    3 主题
  29. protocols
    2 主题
  30. circuit-switching-packet-switching
    1 主题
  31. processors-parallel-processing-and-virtual-machines
    5 主题
  32. boolean-algebra-and-logic-circuits
    4 主题
  33. purposes-of-an-operating-system-os
    3 主题
  34. translation-software
    3 主题
  35. encryption-encryption-protocols-and-digital-certificates
    3 主题
  36. artificial-intelligence-ai
    4 主题
  37. recursion
    1 主题
  38. programming-paradigms
    4 主题
  39. object-oriented-programming
    7 主题
  40. file-processing-and-exception-handling
    2 主题
  41. data-representation
    5 主题
  42. multimedia
    3 主题
  43. compression
    2 主题
  44. networks-and-the-internet
    11 主题
课 Progress
0% Complete

Implementing a stack

How do you program a stack?

  • To recap the main operations of stacks and how they work, read the ADT overview

  • When programming a stack, the main operations listed below must be included in your program.

  • The main operations for stacks are:

Main operations

Operation

Pseudocode

Python

Java

isEmpty()

FUNCTION isEmpty(s : Stack) RETURNS BOOLEAN RETURN s.top = -1 ENDFUNCTION

def isEmpty(self): return len(self.stack) == 0

stack.isEmpty();

isFull()

FUNCTION isFull(s : Stack) RETURNS BOOLEAN RETURN s.top = s.capacity - 1 ENDFUNCTION

def isFull(self): return len(self.stack) == self.capacity

public boolean isFull() { return top == capacity - 1; }

push(value)

PROCEDURE push(s : REF Stack, value : INTEGER) IF NOT isFull(s) THEN s.top ← s.top + 1 s.items[s.top] ← value ELSE OUTPUT "Stack is full" ENDIF ENDPROCEDURE

stack.push(1)

stack.push(1);

pop()

FUNCTION pop(s : REF Stack) RETURNS INTEGER IF NOT isEmpty(s) THEN DECLARE value : INTEGER value ← s.items[s.top] s.top ← s.top - 1 RETURN value ELSE RETURN -1 ENDIF ENDFUNCTION

popped_item = stack.pop()

int poppedItem = stack.pop();

peek()

FUNCTION peek(s : Stack) RETURNS INTEGER IF NOT isEmpty(s) THEN RETURN s.items[s.top] ELSE RETURN -1 ENDIF ENDFUNCTION

def peek(self): if not self.isEmpty(): return self.stack[-1] else: return None

int topItem = stack.peek();

size()

FUNCTION size(s : Stack) RETURNS INTEGER RETURN s.top + 1 ENDFUNCTION

size = len(stack)

int size = stack.size();

  • In pseudocode, we assume a record-based stack with fields like items, top, and capacity

  • Python uses built-in lists or a class with .push() and .pop() methods

  • Java uses Stack<E> from java.util.Stack

Stack in operation (Pseudocode)

TYPE Stack DECLARE items : ARRAY[0:4] OF INTEGER DECLARE top : INTEGER DECLARE capacity : INTEGER
ENDTYPE // Initialise stack
DECLARE s : Stack
s.top ← -1
s.capacity ← 5 // Push 3 values onto the stack
CALL push(s, 10)
CALL push(s, 20)
CALL push(s, 30) // Peek at the top item
OUTPUT "Top item is ", peek(s) // Pop 2 values from the stack
DECLARE val : INTEGER
val ← pop(s)
OUTPUT "Popped value: ", val val ← pop(s)
OUTPUT "Popped value: ", val // Output current stack size
OUTPUT "Current size: ", size(s)
  • Defines a Stack structure with a fixed-size array of 5 items, a top pointer, and a capacity

  • Initialises the stack with top ← -1 to indicate it is empty

  • Pushes 3 values (10, 20, 30) onto the stack one by one:

    • Each push increases top and adds the value to the items array

  • Peeks at the current top of the stack:

    • Returns 30 without removing it

  • Pops two values off the stack:

    • First pop returns 30, second returns 20

    • Each pop decreases top by 1

  • Outputs the current size of the stack:

    • After popping twice, only one value (10) remains → size is 1

Python

class Stack: def __init__(self, capacity): self.stack = [] self.capacity = capacity def isEmpty(self): return len(self.stack) == 0 def isFull(self): return len(self.stack) == self.capacity def push(self, value): if not self.isFull(): self.stack.append(value) else: print("Stack is full") def pop(self): if not self.isEmpty(): return self.stack.pop() else: return None def peek(self): if not self.isEmpty(): return self.stack[-1] else: return None def size(self): return len(self.stack) # Stack in operation
s = Stack(5) # Push 3 values
s.push(10)
s.push(20)
s.push(30) # Peek at top
print("Top item is", s.peek()) # Pop 2 values
print("Popped value:", s.pop())
print("Popped value:", s.pop()) # Output current size
print("Current size:", s.size())

Java

import java.util.Stack; public class StackExample { public static void main(String[] args) { Stack<Integer> s = new Stack<>(); // Push 3 values s.push(10); s.push(20); s.push(30); // Peek at top System.out.println("Top item is " + s.peek()); // Pop 2 values System.out.println("Popped value: " + s.pop()); System.out.println("Popped value: " + s.pop()); // Output current size System.out.println("Current size: " + s.size()); }
}

Worked Example

Study the pseudocode function PushAnimal():

FUNCTION PushAnimal(DataToPush : STRING) RETURNS BOOLEAN IF AnimalTopPointer = 20 THEN RETURN FALSE ELSE Animal[AnimalTopPointer] ← DataToPush AnimalTopPointer ← AnimalTopPointer + 1 RETURN TRUE ENDIF
ENDFUNCTION

Write program code for the function PushAnimal()[3]

Answer

  • Function header (and close where appropriate) with parameter, checking if full (AnimalTopPointer = 20) and returning false [1 mark]

  • If not full, inserting parameter value into AnimalTopPointer [1 mark]

  • …incrementing pointer and returning true [1 mark]

Example program code:

Java

public static Boolean PushAnimal(String DataToPush){ if(AnimalTopPointer == 20){ return false; }else{ Animal[AnimalTopPointer] = DataToPush; AnimalTopPointer++; return true; }
}

VB.NET

Function PushAnimal(DataToPush) If AnimalTopPointer = 20 Then Return False Else Animal(AnimalTopPointer) = DataToPush AnimalTopPointer = AnimalTopPointer + 1 Return True End If
End Function

Python

def PushAnimal(DataToPush): global AnimalTopPointer global ColourTopPointer if AnimalTopPointer == 20: return False else: Animal.append(DataToPush) AnimalTopPointer +=1 return True

Responses

您的邮箱地址不会被公开。 必填项已用 * 标注