Here's the Stack class that we wrote in the lecture, and also discussed in the tutorial:
using static System.Console;
// stack with a fixed size limit
class Stack {
int[] a;
int count;
public Stack(int limit) {
a = new int[limit];
count = 0;
}
public bool isEmpty() => count == 0;
public bool push(int k) {
if (count == a.Length)
return false; // stack is full
a[count++] = k;
return true;
}
public int pop() {
return a[--count];
}
}
class Program {
static void Main(string[] args) {
Stack s = new Stack(50);
for (int i = 1 ; i <= 10 ; ++i)
s.push(i * i);
while (!s.isEmpty())
WriteLine(s.pop());
}
}Here's the binary tree class that we wrote in the tutorial:
using static System.Console;
class Node {
public int val;
public Node left, right;
public Node(Node left, int val, Node right) {
this.left = left;
this.val = val;
this.right = right;
}
}
class BinaryTree {
Node root;
public BinaryTree() {
root = null;
}
public bool contains(int i) {
Node n = root;
while (n != null) {
if (i < n.val)
n = n.left;
else if (i > n.val)
n = n.right;
else
return true; // we found it
}
return false;
}
public void insert(int i) {
// We didn't implement this. Writing this yourself would be a good exercise.
}
// Return the total number of nodes in n and its children (recursively).
int count(Node n) {
if (n == null)
return 0;
return 1 + count(n.left) + count(n.right);
}
// Return the total number of nodes in the tree.
int nodes() => count(root);
// Store all values in node n and its children, in ascending order.
void store(int[] a, ref int pos, Node n) {
if (n == null)
return;
store(a, ref pos, n.left);
a[pos++] = n.val;
store(a, ref pos, n.right);
}
public int[] toArray() {
int[] a = new int[nodes()];
int pos = 0;
store(a, ref pos, root);
return a;
}
}