Week 9 - Wednesday CS222.

Slides:



Advertisements
Similar presentations
Linked Lists.
Advertisements

CS 11 C track: lecture 7 Last week: structs, typedef, linked lists This week: hash tables more on the C preprocessor extern const.
C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast.
C Structures and Memory Allocation There is no class in C, but we may still want non- homogenous structures –So, we use the struct construct struct for.
Unions The storage referenced by a union variable can hold data of different types subject to the restriction that at any one time, the storage holds data.
Chapter 9 Times and Timers Source: Robbins and Robbins, UNIX Systems Programming, Prentice Hall, 2003.
1 Homework / Exam HW7 due class 25 Exam 3 - class 26 –Open Book, Open Notes –Covers up through end of K&R 7 –and Appendix B Standard Library –Plus UNIX.
1 Homework Turn in HW2 at start of next class. Starting Chapter 2 K&R. Read ahead. HW3 is on line. –Due: class 9, but a lot to do! –You may want to get.
Exec function Exec function: - replaces the current process (its code, data, stack & heap segments) with a new program - the new program starts executing.
Week 8 - Friday.  What did we talk about last time?  String to int conversions  Users and groups  Password files.
Review of C++ Programming Part II Sheng-Fang Huang.
1 The UNIX date command myclock.cpp example The C/C++ time() and ctime() functions myclock2.cpp example Inline function definitions Inline class member.
4061 Session 17 (3/19). Today Time in UNIX Today’s Objectives Define what is meant when a system is called “interrupt-driven” Describe some trade-offs.
Data Structures Week 5 Further Data Structures The story so far  We understand the notion of an abstract data type.  Saw some fundamental operations.
Chapter 0.2 – Pointers and Memory. Type Specifiers  const  may be initialised but not used in any subsequent assignment  common and useful  volatile.
Week 6 - Wednesday.  What did we talk about last time?  Exam 1!  And before that…  Review!  And before that…  Arrays and strings.
Linked Lists part 2 CS 244 Brent M. Dingle, Ph.D. Game Design and Development Program Department of Mathematics, Statistics, and Computer Science University.
Copyright ©: Nahrstedt, Angrave, Abdelzaher1 Timers and Clocks.
Week 4 - Monday.  What did we talk about last time?  Queues  Implementing queues with circular arrays.
Copyright ©: Nahrstedt, Angrave, Abdelzaher, Caccamo1 Timers and Clocks.
Interacting with Unix. Getting the Process ID u Synopsis #include pid_t getpid(void); u Example: #include int main(){ pid_t n = getpid(); printf("Process.
Week 4 - Monday.  What did we talk about last time?  Precedence  Selection statements  Loops  Lab 3.
Doubly Linked List Exercises Sometimes it is useful to have a linked list with pointers to both the next and previous nodes. This is called a doubly linked.
Week 9 - Wednesday.  What did we talk about last time?  structs.
Advanced Programming in the UNIX Environment Hop Lee.
Computer Science 516 Addressing Modes. Addressing modes are how our programs get to data Multiple addressing modes created for specific uses Function.
Linked Lists Source: presentation based on notes written by R.Kay, A. Hill and C.Noble ● Lists in general ● Lists indexed using pointer arrays ● Singly.
Week 9 - Friday.  What did we talk about last time?  typedef  Linked lists.
Copyright ©: Nahrstedt, Angrave, Abdelzaher, Caccamo
Week 9 - Monday CS222.
LINKED LISTS.
Week 2 - Wednesday CS 121.
EGR 2261 Unit 11 Pointers and Dynamic Variables
Performance Analysis Tools
Lesson #8 Structures Linked Lists Command Line Arguments.
Winter 2009 Tutorial #6 Arrays Part 2, Structures, Debugger
User-Written Functions
Week 4 - Monday CS221.
User Interaction and Variables
5.13 Recursion Recursive functions Functions that call themselves
Week 4 - Friday CS221.
C Interview Questions Prepared By:.
CS 215 Final Review Ismail abumuhfouz Fall 2014.
Introduction to Linked Lists
A bit of C programming Lecture 3 Uli Raich.
Lectures linked lists Chapter 6 of textbook
Sequences 6/18/2018 8:51 PM C201: Linked List.
Quiz 11/15/16 – C functions, arrays and strings
Data Structures Interview / VIVA Questions and Answers
Week 4 - Monday CS222.
LINKED LISTS CSCD Linked Lists.
Introduction to Linked Lists
Optimizing Malloc and Free
C Structures, Unions, Bit Manipulations and Enumerations
Winter 2018 CISC101 12/1/2018 CISC101 Reminders
Measuring Program Performance Matrix Multiply
Further Data Structures
Constructors and Other Tools
Introduction to Data Structure
Time Sources and Timing
Data Structures & Algorithms
php.ini (in C:\xampp\php\) date.timezone = Asia/Taipei
Measuring Program Performance Matrix Multiply
閨怨 ~王昌齡 閨中少婦不知愁, 春日凝妝上翠樓; 忽見陌頭楊柳色, 悔教夫婿覓封侯。.
17CS1102 DATA STRUCTURES © 2018 KLEF – The contents of this presentation are an intellectual and copyrighted property of KL University. ALL RIGHTS RESERVED.
閨怨 ~王昌齡 閨中少婦不知愁, 春日凝妝上翠樓; 忽見陌頭楊柳色, 悔教夫婿覓封侯。.
Week 7 - Monday CS 121.
Week 9 - Monday CS222.
Data Structures & Programming
Presentation transcript:

Week 9 - Wednesday CS222

Last time What did we talk about last time? structs

Questions?

Project 4

Quotes C combines the power and performance of assembly language with the flexibility and ease-of-use of assembly language. Anonymous

Time

Time In the systems programming world, there are two different kinds of time that are useful Real time This is also known as wall-clock time or calendar time It's the human notion of time that we're familiar with Process time Process time is the amount of time your process has spent on the CPU There is often no obvious correlation between process time and real time (except that process time is never more than real time elapsed)

Calendar time For many programs it is useful to know what time it is relative to some meaningful starting point Internally, real world system time is stored as the number of seconds since midnight January 1, 1970 Also known as the Unix Epoch Possible values for a 32-bit value range from December 13, 1901 to January 19, 2038 Systems and programs that use a 32-bit signed int to store this value may have strange behavior in 2038

time() The time() function gives back the seconds since the Unix Epoch Its signature is: time_t is a signed 32-bit or 64-bit integer You can pass in a pointer to a time_t variable or save the return value (both have the same result) Typically we pass in NULL and save the return value Include time.h to use time() time_t time(time_t* timePointer); time_t seconds = time(NULL); printf("%d seconds have passed since 1970", seconds);

Time structures Many time functions need different structs that can hold things One such struct is defined as follows: struct timeval { time_t tv_sec; // Seconds since Epoch suseconds_t tv_usec; // Extra microseconds };

gettimeofday() The gettimeofday() function offers a way to get higher precision timing data Its signature is: From the previous slide, timeval has a tv_secs member which is the same as the return value from time() It also has a tv_usec member which gives microseconds (millionths of a second) The timezone pointer tz is obsolete and should have NULL passed into it Include sys/time.h (not the same as time.h) to use this function int gettimeofday(struct timeval *tv, struct timezone *tz);

Timing with gettimeofday() gettimeofday() is a reliable way to see how long something takes Get the start time, the end time, and subtract them double start; double end; struct timeval tv; gettimeofday(&tv, NULL); start = tv.tv_sec + tv.tv_usec/1000000.0; someLongRunningFunction(); end = tv.tv_sec + tv.tv_usec/1000000.0; printf("Your function took %.3f seconds", end – start);

ctime() What about printing out a human-readable version of the time? ctime() takes a time_t value and returns a string giving the day and time Alternatively, strftime() has a set of specifiers (similar to printf()) that allow for complex ways to format the date and time printf(ctime(time(NULL)); //prints Fri Mar 15 14:22:34 2013

Broken down time structure struct tm { int tm_sec; // Seconds (0-60) int tm_min; // Minutes (0-59) int tm_hour; // Hours (0-23) int tm_mday; // Day of the month (1-31) int tm_mon; // Month (0-11) int tm_year; // Year since 1900 int tm_wday; // Day of the week (Sunday = 0) int tm_yday; // Day in the year (0-365; 1 Jan = 0) int tm_isdst; /* Daylight saving time flag > 0: DST is in effect; = 0: DST is not effect; < 0: DST information not available */ };

gmtime(), localtime(), and mktime() gmtime() and localtime() convert a time_t value to a struct that contains "broken down" time gmtime() gives UTC time (used to be called Greenwich Mean Time) localtime() gives the local time, assuming it is set up correctly mktime() can convert from a broken down time back into time_t time_t seconds = time(NULL); struct tm* brokenDownTime = NULL; brokenDownTime = localtime(&seconds); if( (*brokenDownTime).tm_wday == 1 ) printf("It's just another manic Monday.\n");

Jiffies How accurate is the microsecond part of gettimeofday()? It depends on the accuracy of the software clock in your system This clock measures time in units called jiffies A jiffy used to be 10 milliseconds (100 Hz) They raised the accuracy to 1 millisecond (1000 Hz) Now, it can be configured for your system to 10, 4 (the default), 3.3333, and 1 milliseconds

Process time For optimization purposes, it can be useful to know how much time a process spends running on the CPU This time is often broken down into User time: the amount of time your program spends executing its own code System time: the amount of time spent in kernel mode executing code for your program (memory allocation, page faults, file opening)

The time command You can time a program's complete execution by running it with the time command It will give the real time taken, user time, and system time Let's say you've got a program called timewaster Run it like this: Output might be: time ./timewaster real 0m4.84s user 0m1.030s sys 0m3.43s

Back to structs

Example Read in 100 student names, GPAs, and ID numbers Sort them by ID numbers Print out the values struct student { char name[100]; double GPA; int ID; };

Naming types You might have noticed that there are all these odd types floating around time_t size_t On some systems, you will even see aliases for your basic types FLOAT INT32 How do people create new names for existing types?

typedef The typedef command allows you to make an alias for an existing type You type typedef, the type you want to alias, and then the new name Don't overuse typedef It is useful for types like time_t which can have different meanings in different systems typedef int SUPER_INT; SUPER_INT value = 3; //has type int

typedef with structs The typedef command is commonly used with structs Often it is built into the struct declaration process It allows the programmer to leave off the stupid struct keyword when declaring variables The type defined is actually struct _wombat We can refer to that type as wombat typedef struct _wombat { char name[100]; double weight; } wombat; wombat martin;

Even more confusing! You can actually typedef the name of the struct to be the same without the struct part Or, if you don't need the name of the struct inside itself, you can typedef an anonymous struct typedef struct wombat { char name[100]; double weight; } wombat; typedef struct { char name[100]; double weight; } wombat;

Linked lists

Linked lists Since you have all taken CS122 (and many have taken CS221), you all know the power of the linked list A linked list is a dynamic data structure with the following features: Insertion, add, and delete can be O(1) time Search is O(n) time They are ideally suited for a merge sort They are a pain to program

X Singly linked list Node consists of data and a single next pointer Advantages: fast and easy to implement Disadvantages: forward movement only head 23 47 58 X

Linked lists in C Since C doesn't have classes, we can't make a self-contained linked list But we can create nodes and a set of operations to use on them Clearly, we will need a struct to make the node It will contain data It will contain a pointer to the next node in the list Doubly-linked lists are possible too

An example node struct We'll use this definition for our node for singly linked lists Somewhere, we will have the following variable to hold the beginning of the list typedef struct _node { int data; struct _node* next; } node; node* head = NULL;

Add to front Let's define a function that takes a pointer to a (possibly empty) linked list and adds a value to the front There are two possible ways to do it Return the new head of the list Take a pointer to a pointer and change it directly node* add(node* head, int value); void add(node** headPointer, int value);

Find Let's define a function that takes a pointer to a (possibly empty) linked list and a value and returns the node containing the value Or NULL if there is no such node node* find(node* head, int value);

Sum values Let's define a function that takes a pointer to a (possibly empty) linked list and returns the sum of the values inside An empty list has a sum of 0 int sum(node* head);

Remove Let's define a function that takes a pointer to a (possibly empty) linked list and deletes the first occurrence of a given value List is unchanged if the value isn't found There are two possible ways to do it Return the new head of the list Take a pointer to a pointer and change it directly node* remove(node* head, int value); void remove(node** headPointer, int value);

Insert in sorted order Let's define a function that takes a pointer to a (possibly empty) linked list and adds a value in sorted order (assuming that the list is already sorted) There are two possible ways to do it Return the new head of the list Take a pointer to a pointer and change it directly node* add(node* head, int value); void add(node** headPointer, int value);

Quiz

Upcoming

Next time… The enum type Lab 9

Reminders Finish Project 4 Keep reading K&R chapter 6 Due Friday by midnight! Keep reading K&R chapter 6