590 likes | 799 Vues
PASCAL II - Data Structures. Philip Fees CS341. Introduction. What will be studied? Data Types Arrays Records Abstract Data Pointers Linked lists, Stacks, Queues What is a data structure?. Workshop 1. File I/O Concepts Pascal File I/O User Defined Types. File I/O Concepts.
E N D
PASCAL II - Data Structures Philip Fees CS341 CS341 PASCAL II - Data Structures
Introduction • What will be studied? • Data Types • Arrays • Records • Abstract Data • Pointers • Linked lists, Stacks, Queues • What is a data structure? CS341 PASCAL II - Data Structures
Workshop 1 • File I/O Concepts • Pascal File I/O • User Defined Types CS341 PASCAL II - Data Structures
File I/O Concepts • Generally termed Device I/O • Could be hard disk, CD-ROM, tape, etc. • Could be terminal, socket (IPC/Internet), etc. • Delimited files (whitespace, eol, eof) vs. non delimited • Encoded (ASCII, EBCDIC) vs. binary • Open and Close • Read or write via file/device handle (symbolic name) • Seek vs. non-seek devices • Sequential vs. Indexed CS341 PASCAL II - Data Structures
Pascal File I/O - Handles • Identify handle (symbolic name) Program myProgram (input, output, fileHandle); … VAR fileHandle : text; • Associate file to handle • “create procedure file prior to compiling and running the program” • TP: assign(fileHandle,’myTextFile.txt’); CS341 PASCAL II - Data Structures
Pascal File I/O - Open & Seek • Open the file reset(fileHandle); • rewind is part of “seeking” • delimiter tests WHILE not eol DO WHILE not eol(fileHandle) DO WHILE not eof DO WHILE not eof(fileHandle) DO CS341 PASCAL II - Data Structures
Pascal File I/O - Read & Write • Read from file via handle readln(fileHandle, variable1, variable2, …); • Write to file via handle writeln(fileHandle, ‘this is a test’, variable1, …); • Ease old file contents rewrite(fileHandle); • See example pg. 444 CS341 PASCAL II - Data Structures
Exercises • Pg. 448 25 - 30 CS341 PASCAL II - Data Structures
User Defined Types • Characteristic of a data type (int, char, boolean) • set of value • fixed amount of memory • Ordinal data type have pred() and succ() values • User defined a.k.a. enumerated data type CS341 PASCAL II - Data Structures
Enumerated Data Type • Syntax Type Weekday = (Mon, Tues, Wed, Thur, Fri); • Usage VAR Day : Weekday; … Day := Mon; if (Day = Mon) then CS341 PASCAL II - Data Structures
Subranges • Define one type as subset of another type • Examples TYPE USYears = 1776..1998; Days = (Sun, Mon, Tues, Wed, Thur, Fri, Sat); Weekdays = Mon..Fri; • Operations: succ() and pred() CS341 PASCAL II - Data Structures
Exercises • Pg. 454-455 # 2, 15 • Pg. 461 #22-26 • Pg. 465 #8, 20, 21, 22 CS341 PASCAL II - Data Structures
Workshop 2 • Single Dimensional Arrays • Selection Sort • Arrays and Subroutines • Searching Arrays CS341 PASCAL II - Data Structures
Arrays • Collection of data elements • Data elements are the same type • Contiguous in memory • Access individuals by subscript • Array size determined by: element size * number of elements CS341 PASCAL II - Data Structures
Pascal Arrays • name : ARRAY [ index type ] OF type; • Example 1: VAR List : ARRAY [1..5] OF integer; • Example 2: TYPE Numbers = ARRAY [1..5] OF integer; VAR List : Numbers; CS341 PASCAL II - Data Structures
Pascal Arrays (cont.) • index type alternatives TYPE DAYS = (SUN, MON, TUES, WED, THUR, FRI, SAT); VAR StockPriceList : ARRAY [9..16] OF real; NegativeList : ARRAY [-2..3] OF char; HoursWorked : ARRAY [MON..FRI] of real; CS341 PASCAL II - Data Structures
Use of Constants • Good Pratice CONST ClassSize = 35; Type TestScores = 0..100; VAR Score : ARRAY [1..ClassSize] of TestScores; CS341 PASCAL II - Data Structures
Arrays and Loops • “Looping” over the array • Example: FOR J := 1 to ClassSize DO BEGIN write(‘next: ‘); readln(Score[J]); writeln(‘value = ‘, Score[J]); END CS341 PASCAL II - Data Structures
Review • Example 10.7 pg. 491 • Example 10.9 pg. 493 • Example 10.10 pg. 494 CS341 PASCAL II - Data Structures
Selection Sort • Sorting a list of values • Algorithm • start with first element [1] (current) • find smallest element in array and exchange with current • current := next array element (current + 1) • continue to end of array • What is the best and worst case? CS341 PASCAL II - Data Structures
Arrays and Subroutines • See GetData example on pg. 508 • Call by value vs. call by reference • Call by value: create a copy of the array • Call by reference: refer to the passed array • Performance implications CS341 PASCAL II - Data Structures
Search Algorithms • Sequential Search (pg. 526) • search entire array until value located or “hit” the end of the array • Average of N iterations of loop • Binary Search (pg. 528) • Assumes sorted array • start in middle; look in upper or lower half • Average of log N iterations of loop CS341 PASCAL II - Data Structures
Analysis • Overhead of inserting new value in sorted array • What should maximum size of the array be? • When should an array be used? CS341 PASCAL II - Data Structures
Exercises • Arrays: pp. 497-500 # 1-5, 10, 20 • Sorts: pg. 507 # 2, 3, 6 • Subroutines: pg. 516 # 16-19 • Searching: pg. #533 5, 15 CS341 PASCAL II - Data Structures
Workshop 3 • Multi-dimensional arrays CS341 PASCAL II - Data Structures
Array in Memory • Array stored in contiguous memory • Location is calculated: • Starting address + (row index * # of columns) + column index • Row Major vs. Column Major CS341 PASCAL II - Data Structures
Pascal Syntax • Syntax <name> : ARRAY [ <row index>, <column index> ] OF <element type> CS341 PASCAL II - Data Structures
Two Dimensional Example • Example 1: VAR Table : ARRAY [ 1..3, 1.. 4 ] OF integer; • Example 2: TYPE Maxtrix = [ 1.. 3, 1.. 4] OF integer; VAR Table : Matrix; CS341 PASCAL II - Data Structures
Iteration • Example: FOR row := 1 to 3 DO FOR column := 1 to 4 DO writeln(‘Table[‘,row,’, ‘, column,’] = ‘, Table[row][column]); CS341 PASCAL II - Data Structures
Higher Dimensional Arrays • Syntax <identifier> : ARRAY [ A1 .. B1, A2 .. B2, …, An .. Bn] OF <type> • Example1: cube : ARRAY [ 1..3, 1..4, 1..5] OF integer; • Example 2: cube : ARRAY [ 1..3 ] OF ARRAY [ 1..4, 1..5 ] OF integer; CS341 PASCAL II - Data Structures
Exercises • pg. 567 # 4, 9-12, 13-15 CS341 PASCAL II - Data Structures
Workshop 4 • Records • Variants • Binary Files CS341 PASCAL II - Data Structures
Workshop 5 • Sets CS341 PASCAL II - Data Structures
Defining and Declaring • Syntax TYPE <type name> = SET OF <base type> ; VAR <variable name> : <type name> ; • Example TYPE Digits = SET OF 0..9; VAR numbers : Digits; CS341 PASCAL II - Data Structures
Different than Subtypes • Assignment numbers := [ 0, 2, 4, 6, 8 ]; • Set is undefined until assignment • Assigned values must be in base type - elements of the set • Universal sets contain all values • Subsets - one set contains all members of another set • See set definitions on top of page 735. CS341 PASCAL II - Data Structures
Set Operations • Union: A + B • Intersection: A * B • Difference: A - B CS341 PASCAL II - Data Structures
Relational Operators • equal: A = B sets A and B are identical • not equal: A <> B set A and B are not identical • subset: A <= B A is a subset of B • superset A >= B A is a superset of B (A<=B) CS341 PASCAL II - Data Structures
Membership • Syntax <element> IN <set> • Example 2 IN numbers • Boolean value: is 2 in the numbers set? CS341 PASCAL II - Data Structures
Membership Example • Useful for “edit checks” • Example IF response IN [‘Y’, ‘y’] THEN (continue action here) ELSE (alternative action here) • Review example on page 744. CS341 PASCAL II - Data Structures
Exercises • Page 739 # 9-15, 26-30 • Page 743 # 2, 7-20, 27 • Programming Problem Page 759 # 1, 3 CS341 PASCAL II - Data Structures
Workshop 6 • Model Builder • Abstract Data Type (ADT) • String ADT • Linked List ADT CS341 PASCAL II - Data Structures
Model Builder • Model, design, or abstraction - analysis without being concern for details • Examples • World Wide Web • Windows • Virus • UNIX: parent process, child process, kill, fork, etc. CS341 PASCAL II - Data Structures
Abstract Data Type • collection of data (objects) • shared properties • shared operations • Examples: Array, Integers, CS341 PASCAL II - Data Structures
ADT Example - String • definition - finite sequence of characters • terminated with null character • access individual elements (substring) • Operations: create, read, write, assign, length • reconsider operations if string is defined by length not null terminator. CS341 PASCAL II - Data Structures
ADT Example - Linked List • Definition - list of data items associated by a link to one or more nodes. • Typically point to next node (single linked) or previous node (double linked) • Head node is first node in list • To “walk” the list, must start at head and proceed sequentially. • Task: Define operations, define interfaces, implement CS341 PASCAL II - Data Structures
Workshop 7 • Linked Lists • Array Implementation of Linked Lists • Pointers • Pointer Implementation of Linked Lists CS341 PASCAL II - Data Structures
Why Linked Lists • Arrays • Size fixed at Compile Time, inefficient space utilization • Inserting, deleting, organizing are costly. Why? • Requirement • Size determined at Run Time • Minimal cost to insert, delete, and organize data • Examples • Sorting, data with undetermined number of items CS341 PASCAL II - Data Structures
Linked Lists • Diagram data structure (See page 872) • Define operations (See page 881) • Define implementation base data structures (See page 873) • Diagram operation’s effect on sample data structure (See page 887) CS341 PASCAL II - Data Structures
Introduction to Pointers • A pointer doesn’t contain the data, but contains a way of locating the data. • Example: Array subscript pointer : integer data : array [1..100] of char; … pointer := 5; writeln(array[pointer]); CS341 PASCAL II - Data Structures
Array Implementation of Linked Lists • Issues • Still have compile time limit on number of nodes, wasted space • Which nodes are “free” • Benefits • Simple base data type • Ok if max nodes know at compile time • Still have benefits of low cost insert, update, and organize CS341 PASCAL II - Data Structures