LINKED LISTS.

Slides:



Advertisements
Similar presentations
Linked Lists CSE 2451 Matt Boggus. Dynamic memory reminder Allocate memory during run-time malloc() and calloc() – return a void pointer to memory or.
Advertisements

LIST PROCESSING.
Singly Linked List BTECH, EE KAZIRANGA UNIVERSITY.
Computer Programming for Engineering Applications ECE 175 Intro to Programming.
Data Structure Lecture-5
Data Structure Lecture-3 Prepared by: Shipra Shukla Assistant Professor Kaziranga University.
Senem Kumova Metin Spring2009 STACKS AND QUEUES Chapter 10 in A Book on C.
Chapter 6 Structures By C. Shing ITEC Dept Radford University.
David Notkin Autumn 2009 CSE303 Lecture 13 This space for rent.
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.
Senem Kumova Metin Spring2009 BINARY TREES && TREE TRAVERSALS Chapter 10 in A Book on C.
Advanced Data Structures Stack –a stack is dynamic data items in a linear order, such that the item first "pushed" in is the last item "popped" out. Think.
Growing Arrays in C By: Victoria Tielebein CS 265- Spring 2011.
1 CS 201 Dynamic Data Structures Debzani Deb. 2 Run time memory layout When a program is loaded into memory, it is organized into four areas of memory.
Self Referential Structure. A structure may not contain a member of its own type. struct check { int item; struct check n; // Invalid };
1 Chapter 16 Linked Structures Dale/Weems. 2 Chapter 16 Topics l Meaning of a Linked List l Meaning of a Dynamic Linked List l Traversal, Insertion and.
Generic lists Vassilis Athitsos. Problems With Textbook Interface? Suppose that we fix the first problem, and we can have multiple stacks. Can we have.
Computer Programming for Engineering Applications ECE 175 Intro to Programming.
Data Structures. Abstract Data Type A collection of related data is known as an abstract data type (ADT) Data Structure = ADT + Collection of functions.
CNG 140 C Programming (Lecture set 12) Spring Chapter 13 Dynamic Data Structures.
POINTERS IN C. Introduction  A pointer is a variable that holds a memory address  This address is the location of another object (typically another.
1 Dynamic Memory Allocation. 2 In everything we have done so far, our variables have been declared at compile time. In these slides, we will see how to.
Linked list: a list of items (nodes), in which the order of the nodes is determined by the address, called the link, stored in each node C++ Programming:
1 Linked List. 2 List A list refers to a sequence of data items  Example: An array The array index is used for accessing and manipulation of array elements.
C Tutorial - Pointers CS 537 – Introduction to Operating Systems.
Lesson #7 Arrays‏.
Introduction We will study how to broaden the modeling facilities of C by defining our own data types that represent structured collections of data pertaining.
LINKED LISTS.
LINKED LISTS.
Lesson #8 Structures Linked Lists Command Line Arguments.
‘C’ Programming Structures and Commands
Linked List :: Basic Concepts
Lectures linked lists Chapter 6 of textbook
2008/11/19: Lecture 18 CMSC 104, Section 0101 John Y. Park
Data Structure and Algorithms
Lecture 8 String 1. Concept of strings String and pointers
Quiz 11/15/16 – C functions, arrays and strings
Linked lists.
Visit for more Learning Resources
Module 2 Arrays and strings – example programs.
Computer science C programming language Lesson 5
Strings A string is a sequence of characters treated as a group
Arrays in C.
Linked Lists head One downside of arrays is that they have a fixed size. To solve this problem of fixed size, we’ll relax the constraint that the.
Introduction to Data Structures
Programming Languages and Paradigms
Lists.
Programmazione I a.a. 2017/2018.
Stack Lesson xx   This module shows you the basic elements of a type of linked list called a stack.
Basic notes on pointers in C
Buy book Online -
Lists.
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Linked Lists Chapter 10.
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Linked List.
Chapter 16 Linked Structures
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Data Structures & Algorithms
Chapter 9: Pointers and String
Structures CSE 2031 Fall May 2019.
Exam #1 February 23rd (Next Friday)
2008/11/19: Lecture 18 CMSC 104, Section 0101 John Y. Park
Arrays, Part 1 of 2 Topics Definition of a Data Structure
CSCE 206 Lab Structured Programming in C
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Linked lists.
Files Chapter 8.
Presentation transcript:

LINKED LISTS

Linked Lists A list is a finite sequence, with order taken into account. A linked list consists of ordered nodes like N1, N2, N3,...Nn together with the address of the first node N1. Each node has several fields, one of which is an address field.

Linked Lists The address field of N1 contains the address of N2, the address field of N2, the address of N3, and so on.... The address field of Nn is a NULL address. In the following example, the variable start contains the address of the first node. Each node has two fields, the first contains an integer indicating the position of the node in the list, the second field contains the address of the next node. start 1 2 3

Example of a linked list To declare a linked list, we need to declare a structure where the last component will be a pointer to a variable of the structured type itself. Let's define a list of elephants. Notice that the next component is a pointer to a struct ELEPHANT. The other component store the animal's name and weight. typedef struct ELEPHANT { char name [10]; int weight; struct ELEPHANT* next; }elephant;

Example of a linked list Next, let's declare variables to store our list nodes and the start of the list. /* the nodes - ready to contain 3 elephant names */ elephant eleph1, eleph2, eleph3; /* the start variable - pointer to an elephant node */ elephant* start;

Example of a linked list Let's fill now the elephants' names and weight: strcpy (eleph1.name, "Edna"); strcpy (eleph2.name, "Elmer"); strcpy (eleph3.name, "Eloise"); eleph1.weight = 4500; eleph2.weight = 6000; eleph3.weight = 4750; start eleph1 eleph2 eleph3 "Edna" 4500 "Elmer" 6000 "Eloise" 4500

Example of a linked list Next, let's link all these elephants together and build the linked list. start = &eleph1; eleph1.next = &eleph2; eleph2.next = &eleph3; eleph3.next = NULL; start eleph1 eleph2 eleph3 "Edna" 4500 "Elmer" 6000 "Eloise" 4500

Example of a linked list Finally, let's use our linked list. We will print out the names of all the elephants in it. We will use a a variable p (elephant* p;) as a travelling variable through the list (not unlike the i variable we used to travel though an array). count = 1; /* to count the elephants */ /* the list loop */ for (p = start; p != NULL; p = p->next)‏ { printf ("Elephant #%d is %s.\n", count, p->name); count = count + 1; }

Linked Lists and functions Linked lists can of course be sent to functions. Let's have a function that accepts a list of elephants and returns 1 if an elephant weighing more than 5000kg can be found in the list. int find5000 (elephant* ptr)‏ { int found = 0; for (p = start; p != NULL; p = p->next)‏ if (ptr->weight > 5000)‏ found = 1; return (found); } find5000 (start); would return 1 .

Lists and dynamic allocation So far we knew in advance the number of elephants in the list. But what if we didn't? Let's now have a function named get_elephants that will fill the list from user input. Since we do not know how many elephants the user will enter, we will use dynamic allocation for every node. In the main program, in that case, only the start variable will be declared and all the nodes will be dynamically allocated and filled with values in the function. The function will be called this way: start = get_elephants ( );

Lists and dynamic allocation elephant* get_elephants (void)‏ { elephant *current, *first; int response; /* create first node */ first = (elephant*)calloc(1,sizeof(elephant)); current = first; printf("Elephant name? "); scanf ("%s", current->name); printf("Elephant weight? "); scanf ("%d", &current->weight); printf("\nAdd another? (y=1/n=0)"); scanf ("%d", &response)‏ cont...

Lists and dynamic allocation while (response)‏ /*while response is 1 (yes) */ { /* allocate node and change current pointer */ current->next = (elephant *)calloc (1,sizeof(elephant)); current = current->next; /* fill node */ printf("Elephant name? "); scanf ("%s", current->name); printf("Elephant weight? "); scanf ("%d", &current->weight); printf("\nAdd another? (y=1/n=0)"); scanf ("%d", &response); } cont...

Lists and dynamic allocation current->next = NULL; return (first); } Now can you think how to: Add a node at the end of a linked list? Add a node at the beginning? Insert a node between two nodes? Delete a node? start eleph1 eleph2 eleph3 "Edna" 4500 "Elmer" 6000 "Eloise" 4500

#include <stdio.h> #include <string.h> Creates a linked list to hold four tree names and prints out all the trees in the list. /* This program creates a linked list of tree names. Each node contains the name of the tree and a pointer to the next tree. */ #include <stdio.h> #include <string.h> typedef struct tree { char tree_name [20]; struct tree* next;}tree; int main (void){ /* declaring variables to hold tree nodes */ tree tree1, tree2, tree3, tree4; /* declaring the starting and traveling pointers */ tree *p, *start; /* putting tree names into each node */ strcpy (tree1.tree_name, "Maple"); strcpy (tree2.tree_name, "Fir"); strcpy (tree3.tree_name, "Pine"); strcpy (tree4.tree_name, "Oak");

/* setting the start of the list at tree1 */ start = &tree1; /* linking the other trees together */ tree1.next = &tree2; tree2.next = &tree3; tree3.next = &tree4; /* sets tree4 as the last node of the list */ tree4.next = NULL; /* printing out the list by traveling though it */ p = &tree1; while (p != NULL) { printf ("%s\n", p -> tree_name); p = p -> next; } return (0);

The function checks if a tree name exists in the list of trees from the previous example program. #include <stdio.h> #include <string.h> typedef struct tree { char tree_name [20]; struct tree* next; }tree; int checktree (tree *p, char name[]){ int found = 0; while (p != NULL) { if (strcmp(p -> tree_name, name) == 0) found = 1; p = p -> next; } return (found); int main (void){ /* declaring variables to hold tree nodes */ tree tree1, tree2, tree3, tree4; char treename[20]; /* declaring the starting and traveling pointers */ tree *p, *start; /* putting tree names into each node */ strcpy (tree1.tree_name, "Maple"); strcpy (tree2.tree_name, "Fir"); strcpy (tree3.tree_name, "Pine"); strcpy (tree4.tree_name, "Oak");

/* setting the start of the list at tree1 */ start = &tree1; /* linking the other trees together */ tree1.next = &tree2; tree2.next = &tree3; tree3.next = &tree4; /* sets tree4 as the last node of the list */ tree4.next = NULL; /* checking if a tree is in the list */ printf ("Enter tree name to search: "); gets (treename); if (checktree(start, treename)) printf ("%s was found in our list of trees.\n", treename); else printf ("%s was not found in our list of trees.\n", treename); return (0); }

LINKED LISTS

PLEASE CHECK THE MAIN COURSE PAGE FOR THE NOTES.

#include <stdio.h> #include <string.h> Creates a linked list to hold four tree names and prints out all the trees in the list. /* This program creates a linked list of tree names. Each node contains the name of the tree and a pointer to the next tree. */ #include <stdio.h> #include <string.h> typedef struct tree { char tree_name [20]; struct tree* next;}tree; int main (void){ /* declaring variables to hold tree nodes */ tree tree1, tree2, tree3, tree4; /* declaring the starting and traveling pointers */ tree *p, *start; /* putting tree names into each node */ strcpy (tree1.tree_name, "Maple"); strcpy (tree2.tree_name, "Fir"); strcpy (tree3.tree_name, "Pine"); strcpy (tree4.tree_name, "Oak");

/* setting the start of the list at tree1 */ start = &tree1; /* linking the other trees together */ tree1.next = &tree2; tree2.next = &tree3; tree3.next = &tree4; /* sets tree4 as the last node of the list */ tree4.next = NULL; /* printing out the list by traveling though it */ p = &tree1; while (p != NULL) { printf ("%s\n", p -> tree_name); p = p -> next; } return (0);

The function checks if a tree name exists in the list of trees from the previous example program. #include <stdio.h> #include <string.h> typedef struct tree { char tree_name [20]; struct tree* next; }tree; int checktree (tree *p, char name[]){ int found = 0; while (p != NULL) { if (strcmp(p -> tree_name, name) == 0) found = 1; p = p -> next; } return (found); int main (void){ /* declaring variables to hold tree nodes */ tree tree1, tree2, tree3, tree4; char treename[20]; /* declaring the starting and traveling pointers */ tree *p, *start; /* putting tree names into each node */ strcpy (tree1.tree_name, "Maple"); strcpy (tree2.tree_name, "Fir"); strcpy (tree3.tree_name, "Pine"); strcpy (tree4.tree_name, "Oak");

/* setting the start of the list at tree1 */ start = &tree1; /* linking the other trees together */ tree1.next = &tree2; tree2.next = &tree3; tree3.next = &tree4; /* sets tree4 as the last node of the list */ tree4.next = NULL; /* checking if a tree is in the list */ printf ("Enter tree name to search: "); gets (treename); if (checktree(start, treename)) printf ("%s was found in our list of trees.\n", treename); else printf ("%s was not found in our list of trees.\n", treename); return (0); }