DOC PREVIEW
UIUC ECE 190 - Programming Studio

This preview shows page 1-2-3-4-5-6 out of 18 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 18 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 18 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 18 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 18 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 18 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 18 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 18 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

Programming Studio #11 ECE 190Programming Studio #11 • Topics this week: • Data Structures in C • Dynamic Memory Allocation • Linked Lists • MP5 overviewAnnouncements • Exam 2 Programming re-grade requests due by 5pm – “Time spent” is not a valid grading metric • Final Exam Times – AE1: Monday 5/9, 7pm-10pm – AE2: Wednesday 5/11, 1:30pm-4:30pm – AE3: Friday 5/13, 1:30pm-4:30pm • Conflict Exam Deadline: Monday 5/2 5pmCheating • Reminder: We do not tolerate any form of cheating! – Looking at somebody’s code and taking notes is cheating – Sharing code is cheating – Sharing code and renaming variables is still cheating – Sharing code and adding/removing spaces/tabs is still cheatingData Types • Basic data types in C – int (integer), float/double (real number), char (text) • What about data in the real world? – For most parts, real-world data can be represented using integer, real numbers or characters – Data is often aggregated into groups • Vectors: direction, magnitude • Complex numbers: real part, complex part • Student record: last name, first name, UIN, GPA, standing…Data aggregation with structures • Student Record Example First Name (char[]) Last Name (char[]) netID (char[]) UIN (unsigned int) GPA (float) Student Record Structure John Doe doe1 123456789 3.99 Student 1 Sarah Smith Smith1 987654321 4.00 Student 2struct construct • Define a customized data type (structure) • Use it to declare variables struct student_record { char first_name[12]; char last_name[12]; char netid[8]; unsigned int uin; float gpa; }; struct student_record student_1; student_1.first_name = “John”; student_1.last_name = “Doe”; student_1.uin = 123456789; First Name (char[]) Last Name (char[]) netID (char[]) UIN (unsigned int) GPA (float) Student Record StructureMemory allocation for structures • Memory is allocated the same way as for any variable – Locals are allocated on the run-time stack and globals are allocated in the global data section – Variables of type struct occupy contiguous regions of memory blocks. Each block occupies as much memory as the sum of sizes of all of the member elements • How much space does each student entry take up? • Arrays of structures: struct student_record students[100]; student[0].first_name = “John”; student[0].last_name = “Doe”; student[0].uin = 123456789;Structures and Pointers • Since structures are handled the same way as normal data types in C, pointers to structures can be created • Pointers can be dereferenced • Another way to access structure members using a pointer to a structure is to use the -> operator struct student_record students[100]; struct student_record *st_ptr; st_ptr = &students[3]; (*st_ptr).gpa = 3.25; st_ptr->gpa = 3.25;Enumerations • What if your data types should contain only certain values? – Storing multiple choice answers (A,B,C,D) – Opcodes in an assembly language • You could just use an integer value to represent each of these things, but it is not always convenient: – Which opcode is this? If (op == 2) • Solution: create a list where each number is assigned a human readable representation – This is much easier: if (op == LD) • Enumerated list: enum opcode {BR, ADD, LD}; enum opcode op; op = 1; if(op == LD) Is this statement true? which opcode does op hold?Dynamic Memory Allocation • So far we know how to allocate memory using arrays – Limitation: we can only allocate a constant amount of elements – This amount must be known at compile time (specified in the source code) • It could be either waste of memory, or danger of not allocating enough space to store all data • What if we want to allocate during run-time instead of compile time?Dynamic Memory Allocation • Use function malloc(size) to allocate memory at runtime – size is a parameter that tells malloc how many bytes to allocate – Memory is allocated in the heap • Dynamic memory must be freed manually using free function – Without freeing memory, no other programs may use this memory block (we can run out of memory)Dynamic Memory Allocation int main() { struct student_record *students; int number; printf("How many students?"); scanf("%d", &number); students = (student_record*) malloc(number * sizeof(student_record)); /* students is now a pointer to the 0th element of the 'students' block */ students[0].first_name = "John"; students->last_name = "Doe"; /* do stuff */ free(students); }Sample Exercise • Complex number adder – Create a structure for a complex number (float real_part, float complex_part); – Ask the user how many complex numbers will be entered – Dynamically allocate enough space to hold all the complex numbers – Ask the user to enter each number (first ask for the real part, then ask for the complex part) – Add all the complex numbers together: • The real_part of the sum is just the sum of the real parts of all the numbers • The complex_part of the sum is just the sum of the complex parts of all the numbers – Print out the answer in the format: “Sum = <real_part> + j <complex_part>” – Remember to free the memory after you’re done.Linked Lists • A fundamental data structure widely used in computing • Like arrays, linked lists are used to store data as a list of elements • Unlike arrays, each element in the linked list need not be directly adjacent in memory to the next elements in the list A[0] A[1] A[2] array L0 L1 L2 linked list NULLAdding/removing nodes • Add • Remove L0 L1 L2 NULL new node L0 L1 L2 NULL head node tail nodeExample • Car data structure typedef struct carType Car; struct carType { int vehicleID; char make[20]; char model[20]; int year; int mileage; double cost; Car * next; /* ptr to next car in list */ }Scanning the list Car * ScanList(Car * head, int searchID) { Car * previous, * current; previous = head; current = head->next; /* Traverse until ID >= searchID */ while ((current!=NULL) && (current->vehicleID < searchID)) { previous = current; current = current->next; } return previous;


View Full Document
Download Programming Studio
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view Programming Studio and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Programming Studio 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?