summaryrefslogtreecommitdiff
path: root/04-15.md
blob: 01c0ed26d70023ef9a0ba0a7c682791b2e699adc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
[\<- 04/13](04-13.md)

# Abstract Data Type

- An abstract data type is a data type whose **implementation has been hidden or abstracted away.**

- We cannot see the implementation. Instead we have to use a set of functions called the **interface**

- We say the implementation is kept private and the interface is public

Encapsulating the **data** and the **operation** on the data, and then hide them from the user
1. Declaration of data
2. Declaration of operations
3. Encapsulation of data and operations

## Data Structure & ADT

Data Structure:
- Things to care - how to organize data in memory or disk
- Examples: array; linked list;

ADT:
- Things to care
	- what data
	- what operations can be done on these data
- Things not to care
	- how to organize data in memory or disk (It can be done through any data structure)

## Example ADT - FILE

- We don't know what a FILE looks like
- The file system are likely to change from machine to machine, e.g. MAC/Windows, 64 bit/32 bit
- We don't want our program to have to change from machine to machine, so C hides the low level details (implementation) from us. We only use an interface as declared in `<stdio.h>`
	- fopen, fscanf, ...

## Implementing a SET Using Array

Pre-knowledge
1. Store string elements in an array
2. Dynamically sized array
3. Structure

# Store String Elements in an Array

## One String in C - Character Array

Character Array

|m|a|n|g|o|\0|
|-|-|-|-|-|--|

|b|a|n|a|n|a|\0|
|-|-|-|-|-|-|--|

Refer to the character array through a character pointer: `char *`

## Assert

- An **assertion** specifies that a program satisfies certain conditions at a particular points in its execution
- Common uses
	- Pointers are not `NULL`
	- Indices and size values are non-negative and less than a known limit
- Ex.
	- p is a pointer: `assert(p != NULL);`
- Make sure to test the condition **before** the usage of the variable

## Strucutre in C

### Concept
- A structure is **a collection of one or more variables**, possible of different types, grouped together under a single name for convenient handling
- e.g.

```
struct mystruct{
	int a;
	int b;
	char c;
};
```