1 / 545

Lectures on data structures and C 3ed CS(CSI33) By, CHANDRASHEKAR A.M.

This lecture covers basic data structures, manipulation and implementation, and other algorithms in C. Topics include data types, arrays, strings, input/output, and structures.

Télécharger la présentation

Lectures on data structures and C 3ed CS(CSI33) By, CHANDRASHEKAR A.M.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lectures on data structures and C3ed CS(CSI33)By,CHANDRASHEKAR A.M.

  2. Data Structures and Algorithms • Programs. • Different problems. • Operations. • Size of data. • Resources available. copy right (version1.0) SUNITHA C.N,CS&E dept,SJCE

  3. Overview of Lecture • Basic data structures. • How to manipulate them. • How to implement them. • Other algorithms and how to implement them. copy right (version1.0) SUNITHA C.N,CS&E dept,SJCE

  4. This Lecture - Review • Basic C data types • Boolean • 1D and multidimensional arrays • Strings • Input/Output • File I/O • Structures and typedef copy right (version1.0) SUNITHA C.N,CS&E dept,SJCE

  5. Basic Data types in C • int • char • float • double copy right (version1.0) SUNITHA C.N,CS&E dept,SJCE

  6. Boolean • Has two values,trueand false. • In C we use integers as Booleans. • Zero represents false. • Any non-zero integer represents true. • The library <stdbool.h> contains definition for bool, true, and false. (This doesn’t work in Borland) • In Borland programs, use #define to define the constants true and false copy right (version1.0) SUNITHA C.N,CS&E dept,SJCE

  7. #include <stdbool.h> bool leapYear(int year) { if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) ) { return true; } else { return false; } }

  8. For Borland use #define or const int #define true 1 #define false 0 int leapYear(int year) { if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) ) { return true; } else { return false; } }

  9. Recall: File inclusion header #include <stdbool.h> bool leapYear(int year) { if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) ) { return true; } else { return false; } }

  10. Recall: Function definition #include <stdbool.h> bool leapYear(int year) { if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) ) { return true; } else { return false; } }

  11. Recall: Function name #include <stdbool.h> bool leapYear(int year) { if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) ) { return true; } else { return false; } }

  12. Recall: Function return type #include <stbool.h> bool leapYear(int year) { if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) ) { return true; } else { return true; } } Must be compatible with the function’s return type

  13. Recall: #include <stdbool.h> bool leapYear(int year) { if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) ) { return true; } else { return false; } } Function parameter Parameter type

  14. Recall: int main() { int year, month, day; printf(“Enter year, month and day: ”); scanf(“%d %d %d”, &year, &month, &day); day = dayOfYear(year, month, day); printf(“\nDay of Year = %d\n”, day); } Function call

  15. Review - Arrays (1D) array1D: • All the elements are of the same type. • An element: array1D[index] • In C, the first element has index 0 (zero). 0 1 N - 1 copy right (version1.0) SUNITHA C.N,CS&E dept,SJCE

  16. Review - Multidimensional Arrays array2D: • Arrays of arrays. • All the elements are of the same type. • An element:array2D[row][column] copy right (version1.0) SUNITHA C.N,CS&E dept,SJCE

  17. int dayTable[2][13] = { {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} }; int dayOfYear(int year, int month, int day) { int i; int isLeap = leapYear(year); for (i = 1; i < month; i++) { day += dayTable[isLeap][i]; } return day; }

  18. Recall: int dayTable[2][13] = { {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} }; int dayOfYear(int year, int month, int day) { int i; int isLeap = leapYear(year); for (i = 1; i < month; i++) { day += dayTable[isLeap][i]; } return day; } Global variable Local variable

  19. Recall: int dayTable[2][13] = { {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} }; int dayOfYear(int year, int month, int day) { int i; int isLeap = leapYear(year); for (i = 1; i < month; i++) { day += dayTable[isLeap][i]; } return day; } 2-dimensional array of int

  20. Recall: int dayTable[2][13] = { {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} }; int dayOfYear(int year, int month, int day) { int i; int isLeap = leapYear(year); for (i = 1; i < month; i++) { day += dayTable[isLeap][i]; } return day; } Index goes from 0 to 12

  21. Review – Input/Output • Input/Output is done via streams • Uses the library stdio.h • Streams that are available in the library are stdin (keyboard), stdout and stderr (screen). These can be redirected. • Data is written to stdout using the printf() function. • printf("%s\n%f\n%c\n%d\n", name, age, gender, idNumber); • Data is read in from stdin using the scanf() function. • scanf("%s %f %c %d", name, &age, &gender, &idNumber); Format control string Variables containing data to be printed copy right (version1.0) SUNITHA C.N,CS&E dept,SJCE Conversion specifiers Pointers to variables where input will be stored

  22. Review – Input/Output • scanf() returns the number of values successfully read and converted or returns a special value EOF when input ends. • Note for when reading a single character (%c): if there is a \n character left in the buffer from reading another value (%d) then that \n will be read into your character variable. • Conversion specifiers: • i or d: display a signed decimal integer • f: display a floating point value • e or E: display a floating point value in exponential notation • g or G: display a floating point value in either f form or e form • L: placed before any float conversion specifier to indicate that • a long double is displayed copy right (version1.0) SUNITHA C.N,CS&E dept,SJCE

  23. #include <stdio.h> int main() { int day; int month; int year; char name[30]; printf(“Enter your name:\n”> scanf(“%s”, name); /* skipping spaces */ printf(“Hi %s. Enter birthdate as: dd mm yyyy\n”, name); scanf("%d %d %d", &day, &month, &year); /* alternative */ printf(“Hi %s. Enter birthdate as: dd-mm-yyyy\n”, name); scanf("%d-%d-%d", &day, &month, &year); return 0; } Note: no ampersand for strings Conversion specifier Literal characters

  24. Review - Strings • Strings : array of characters • Example: char name[30]; • Unlike other arrays, strings require an end-of-string • character : ‘\0’ • String functions you will use from the string.h library include: • Length - strlen(string1) • Assignment - strcpy(dest, source) • Concatenation - strcat(dest, string2) • Comparison -strcmp(string1, string2) Max length including ‘\0’ Copies string2 onto the end of the destination string Returns: positive if string1 sorts after string2, 0 if they are the same string negative if string1 sorts before string2 copy right (version1.0) SUNITHA C.N,CS&E dept,SJCE

  25. #include <stdio.h> #include <string.h> #define MAXLENGTH 100 int main() { char string1[MAXLENGTH]; char string2[MAXLENGTH]; strcpy(string1, “Hello World!”); strcpy(string2, string1); length = strlen(string1); printf(“length of string1 = %d\n”, length); strcpy(string1, “Apple”); strcpy(string2, “Orange”); string1 needs to fit the number of characters of the second string, +1 for the ‘\0’ character string2 needs to be the same length as string 1

  26. Prints the order which the two strings sort, alphabetically. if (strcmp(string1, string2) < 0) { printf(“%s %s\n”, string1, string2); } else if (strcmp(string1, string2) == 0) { printf(“The strings are the same.\n”); } else { printf(“%s %s\n”, string2, string1); } strcat(string1, “ juice”); printf(“%s\n”, string1); return 0; } Note: To scan within a string use: sscanf(string1, “%d”, int1);

  27. Review -File Handling in C • Files need to be openedbefore use. • Associate a "file handler" to each file • Modes: read, write, or append • File input/output functions use the file handler (not the filename). • Need to check the file opened sucessfully. • Need to closethe file after use. • Basic file handling functions: fopen(), fclose(), fscanf(), fprintf(), fgets(). copy right (version1.0) SUNITHA C.N,CS&E dept,SJCE

  28. Associate a file handler for every file to be used. #include <stdio.h> #define MAXLEN 100 int main() { FILE *inputfile = NULL; FILE *outputfile = NULL; char name[MAXLEN]; int count; float mark; inputfile = fopen(“Names.txt”, “r”); outputfile = fopen(“marks.dat”, “w”); if (inputfile == NULL) { printf(“Unable to open input file.\n”); return 1; } if (outputfile == NULL) { printf(“Unable to open output file.\n”); return 1; } Mode r : read w : write a : append fopen() returns NULL if an error occurs

  29. fscanf()returns the number of values read and converted count = 0; while ( fscanf(inputfile, "%s", name ) == 1 ) { count++; printf("Enter mark for %s: \n", name); scanf("%f", &mark); if ( fprintf(outputfile, "%s %f\n", name, mark) <= 0 ) { printf("Error writing to output file.\n"); return 1; } } printf("\n"); printf("Number of names read: %d\n", count); fclose(inputfile); fclose(outputfile); return 0; } fprintf()returns the number of successfully written or negative if an error occurs

  30. To read in a line, use fgets(). fgets() returns NULL if end of file is reached. #include <stdio.h> #define MAXLEN 100 int main() { FILE *inputfile = NULL; char line[MAXLEN]; int count = 0; inputfile = fopen(“Names.txt”, “r”); if (inputfile == NULL) { printf(“Unable to open input file.\n”); return 1; } while(fgets(line, MAXLEN, inputfile) != NULL) { count++; } printf(“Number of lines: %d”, count); fclose(inputfile); return 0; } fgets(string, length, filehandle) What would happen if you tried to count the number of lines again, once the end of the file has been reached?

  31. Review - struct structname: • Members may have different types. structname.membername • structs are also known as “records,” and members as “fields” copy right (version1.0) SUNITHA C.N,CS&E dept,SJCE

  32. Review - typedef • Gives a new name to a type that has already been defined. • E.g. typedef struct StudentRec Student; • Saves typing struct whatevereverywhere. copy right (version1.0) SUNITHA C.N,CS&E dept,SJCE

  33. Example : #include <stdio.h> #define MAXNAME 80 struct StudentRec { char name[MAXNAME]; int mark; }; typedef struct StudentRec Student;

  34. Recall: #include <stdio.h> #define MAXNAME 80 struct StudentRec { char name[MAXNAME]; int mark; }; typedef struct StudentRec Student; Macro substitution

  35. Recall: #include <stdio.h> #define MAXNAME 80 struct StudentRec { char name[MAXNAME]; int mark; }; typedef struct StudentRec Student; Structure declaration

  36. Recall: Structure name / tag Members Don’t forget this! #include <stdio.h> #define MAXNAME 80 struct StudentRec { char name[MAXNAME]; int mark; }; typedef struct StudentRec Student;

  37. Recall: Data type New type name #include <stdio.h> #define MAXNAME 80 struct StudentRec { char name[MAXNAME]; int mark; }; typedef struct StudentRec Student;

  38. Student readStudent(void) { Student next; scanf(“%s %d”, next.name, &next.mark); return next; } void printStudent(Student student) { printf(“%s %d\n”, student.name, student.mark); }

  39. Recall: An instance of the struct A member of a struct variable “Package” Student readStudent(void) { Student next; scanf(“%s %d”, next.name, &next.mark); return next; } void printStudent(Student student) { printf(“%s %d\n”, student.name, student.mark); }

  40. #define MAXCLASS 100 main() { Student class[MAXCLASS]; int n, i, best = 0; printf(“Enter number of students: ”); scanf(“%d”, &n); for (i = 0; i < n; i++) { class[i] = readStudent(); if (class[best].mark < class[i].mark) { best = i; } } printf(“Best student is: ”); printStudent(class[best]); }

  41. Array of instances of structs Assignment Member of an array element #define MAXCLASS 100 main() { Student class[MAXCLASS]; int n, i, best = 0; printf(“Enter number of students: ”); scanf(“%d”, &n); for (i = 0; i < n; i++) { class[i] = readStudent(); if (class[best].mark < class[i].mark) { best = i; } } printf(“Best student is: ”); printStudent(class[best]); } Recall:

  42. Revision • Basic Data Types and booleans • I/O and File I/O • Arrays and Structs • Strings • Typedef Preparation Next lecture:Pointers copy right (version1.0) SUNITHA C.N,CS&E dept,SJCE

  43. Overview • Revision of Pointers • Basic Pointer Arithmetic • Pointers and Arrays copy right (version1.0) SUNITHA C.N,CS&E dept,SJCE

  44. Pointers • A pointer is a datatype. • You can create variables of this type as you would of other types. • Contains a memory address. • Points to a specific data type. int *pointer1 = &x; int x; addr of x 0x2000 1 copy right (version1.0) SUNITHA C.N,CS&E dept,SJCE 0x9060

  45. Pointer Operations Type object; Type* aPtr; • aPtr = &object assigns the address of object to aPtr. • *aPtr allows access to the object through the pointer. • If aPtr points to a structure then (*aPtr).member is equivalent to aPtr->member copy right (version1.0) SUNITHA C.N,CS&E dept,SJCE

  46. Pointers and Function Arguments swap x: 1 y: 2 x: 2 y: 1 copy right (version1.0) SUNITHA C.N,CS&E dept,SJCE

  47. #include <stdio.h> void fakeSwap(int a, int b) { int tmp; tmp = a; a = b; b = tmp; } int main() { int x = 1, y = 2; fakeSwap(x, y); printf(“%d %d\n”, x, y); } Solution 1

  48. #include <stdio.h> void fakeSwap(int a, int b) { int tmp; tmp = a; a = b; b = tmp; } int main() { int x = 1, y = 2; fakeSwap(x, y); printf(“%d %d\n”, x, y); } Solution 1 x: 1 0x2000 y: 2 0x2010

  49. #include <stdio.h> void fakeSwap(int a, int b) { int tmp; tmp = a; a = b; b = tmp; } int main() { int x = 1, y = 2; fakeSwap(x, y); printf(“%d %d\n”, x, y); } Solution 1 tmp: 0x2060 a: 1 0x2038 b: 2 0x2040 x: 1 0x2000 y: 2 0x2010

  50. #include <stdio.h> void fakeSwap(int a, int b) { int tmp; tmp = a; a = b; b = tmp; } int main() { int x = 1, y = 2; fakeSwap(x, y); printf(“%d %d\n”, x, y); } Solution 1 tmp: 1 0x2060 a: 1 0x2038 b: 2 0x2040 x: 1 0x2000 y: 2 0x2010

More Related