lorin
Uploaded by
29 SLIDES
430 VUES
290LIKES

Comprehensive Guide to Linked Lists and Memory Management in C Programming

DESCRIPTION

This resource provides an in-depth exploration of linked lists and memory management, focusing on key programming techniques in C. Developed by Dr. S. Felix Wu at UC Davis, the guide covers topics like function operations, debugging with GDB, and file I/O methods. It addresses memory allocation strategies using malloc/free and demonstrates practical examples to reinforce concepts. Ideal for computer science students, the content equips learners with the necessary skills to tackle algorithmic problem-solving and optimize code efficiency.

1 / 29

Télécharger la présentation

Comprehensive Guide to Linked Lists and Memory Management in C Programming

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. ecs30 Summer 2014:Programming and Problem Solving#11: Linked List Dr. S. Felix Wu Computer Science Department University of California, Davis http://www.cs.ucdavis.edu/~wu/ wu@cs.ucdavis.edu ecs30 Winter 2012 Lecture #01

  2. Memory Cell Layout main Scan_address Scanf Malloc/free a.out ecs30 Winter 2012 Lecture #22 (guest lecture)

  3. char * strdup(char *s) { return strcpy( (char *) malloc(sizeof(char) *(strlen(s) + 1)), s); } ecs30b Fall 2008 Lecture #27

  4. Debugging Logic Errors for (i = 1; i < n; ++i) product *= i; Section 5.10 for (i = 1; i < n; ++i) { product *= i; printf(“product=%d, i=%d\n”, product, i); } printf(“OUT:product=%d, I =%d\n”, product, i); ecs30 Winter 2012 Lecture #11

  5. Preprocessor #define FACT_DEBUG … … for (i = 1; i < n; ++i) { product *= i; #ifdef FACT_DEBUG printf(“product=%d, i=%d\n”, product, i); #endif/* FACT_DEBUG */ } #ifdef FACT_DEBUG printf(“OUT:product=%d, I =%d\n”, product, i); #endif /* FACT_DEBUG */ % gcc -c fact.c -DFACT_DEBUG % gcc -c fact.c -DFACT_DEBUG=XYZ ecs30 Winter 2012 Lecture #11

  6. The C “TrIO” • printf, scanf(stdout, stdin) • [printf/scanf](<format string>) • fprintf, fscanf(file pointer) • Chapter 12 • [fprintf/fscanf](<FILE *>, <format string>) • fopen and fclose • sprintf, sscanf(string) • Chapter 9 • [sprintf/sscanf](<char *>, <format string>) ecs30 Winter 2012 Lecture #11

  7. File I/O stdout stdin Program stderr foo scanf(“%d”, &x); fscanf(f, “%d”, &x); sscanf(s, “%d”, &x); bar ecs30 Winter 2012 Lecture #11

  8. Standard File I/O stdout stdin Program stderr foo bar ecs30 Winter 2012 Lecture #11

  9. FILE *out_file_p; FILE *out_debug_file_p; intmain(void) {… /* initialization */ out_file_p = fopen("output.hw6_1", "w"); out_debug_file_ p = fopen("debug.hw6_1", "w"); If (out_file_p == NULL) {exit(-1);} /* using the FILE pointers */ /* regular output example */ fprintf(out_file_p, "...", ...); /* debug output example */ #ifdef ECS30_DEBUG fprintf(out_debug_file_p, "...", ...); #endif /*ECS30_DEBUG */ /* finishing/edning */ fclose(out_file_p); fclose(out_debug_file_p); ecs30 Winter 2012 Lecture #17

  10. GNU debugger • The -g flag • gdb a.out • run (r) • break (b) • next (n), nexti (ni) • step (s) • print (p) • display • continue (c) • watch • x ecs30 Winter 2012 Lecture #16

  11. gdb Examples $ script hw7_1_gdb.script • display i • c • n 2 • ni 9 • s • watch i == 3 • watch i != 0 • x /4 0xbffff862 • p i • p s • p s[14] • p s[12] = ‘\0’ • p i = 0 • b main • b strlen • b 12 http://www.digilife.be/quickreferences/QRC/GDB Quick Reference.pdf http://www.hlrs.de/organization/amt/services/tools/debugger/gdb/doc/gdb-6.3.pdf ecs30 Winter 2012 Lecture #16

  12. Abstractive Data Structures • Array • Stack • Queue • Linked-List ecs30b Fall 2008 Lecture #27

  13. Linked-List struct ecs30b Fall 2008 Lecture #27

  14. Linked-List struct struct struct ecs30b Fall 2008 Lecture #27

  15. Linked-List struct struct struct NULL NULL ecs30b Fall 2008 Lecture #27

  16. Linked-List struct struct struct NULL NULL struct ecs30b Fall 2008 Lecture #27

  17. Linked-List struct struct struct NULL NULL struct ecs30b Fall 2008 Lecture #27

  18. Linked-List struct struct struct NULL NULL struct ecs30b Fall 2008 Lecture #27

  19. Linked-List struct struct NULL NULL ecs30b Fall 2008 Lecture #27

  20. struct ll_element { // single link struct ll_element *next; // data, content … }; ecs30b Fall 2008 Lecture #27

  21. struct ll_element { // double links struct ll_element *previous; struct ll_element *next; // data, content … }; ecs30b Fall 2008 Lecture #27

  22. struct ll_element { // double links struct ll_element *previous; struct ll_element *next; // data, content void *data; // operations int (*_init)(void *); int (*_print)(void); int (*_find)(void *); }; ecs30b Fall 2008 Lecture #27

  23. struct ll_element *llp = head_llp; while (llp != NULL) { (*(llp->print))(); // printing data llp = llp->next; } ecs30b Fall 2008 Lecture #27

  24. Review ecs30 Winter 2012 Lecture #01

  25. (1) Problem Solving Variables, I/O, Rules/Logic Efficiency, Correctness (2) Programming Language C versus the rest of the world ecs30 Winter 2012 Lecture #01

  26. Rules/Logic Decision Repeat Functions call by value call by reference Recursion ecs30 Winter 2012 Lecture #01

  27. Data Types Simple types: int, double, char Structure types: struct <name> {…}; Pointers/Arrays ecs30 Winter 2012 Lecture #01

  28. Integer/long Address Pointer &, *, -> Array (multiple diminsional) ecs30 Winter 2012 Lecture #01

  29. smaller \0 larger dst src ecs30 Winter 2012 Lecture #01

More Related
SlideServe
Audio
Live Player
Audio Wave
Play slide audio to activate visualizer