Lecture 11 Array of Linked Lists



Similar documents
Lecture 11 Doubly Linked Lists & Array of Linked Lists. Doubly Linked Lists

Lecture 12 Doubly Linked Lists (with Recursion)

Stacks. Linear data structures

Abstract Data Type. EECS 281: Data Structures and Algorithms. The Foundation: Data Structures and Abstract Data Types

Unit Write iterative and recursive C functions to find the greatest common divisor of two integers. [6]

1. Relational database accesses data in a sequential form. (Figures 7.1, 7.2)

1) The postfix expression for the infix expression A+B*(C+D)/F+D*E is ABCD+*F/DE*++

Data Structure and Algorithm I Midterm Examination 120 points Time: 9:10am-12:10pm (180 minutes), Friday, November 12, 2010

BSc (Hons) Business Information Systems, BSc (Hons) Computer Science with Network Security. & BSc. (Hons.) Software Engineering

recursion, O(n), linked lists 6/14

Lecture 3. Arrays. Name of array. c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] c[8] c[9] c[10] c[11] Position number of the element within array c

DATA STRUCTURES USING C

Coding Rules. Encoding the type of a function into the name (so-called Hungarian notation) is forbidden - it only confuses the programmer.

MAX = 5 Current = 0 'This will declare an array with 5 elements. Inserting a Value onto the Stack (Push)

Output: struct treenode{ int data; struct treenode *left, *right; } struct treenode *tree_ptr;

A binary search tree or BST is a binary tree that is either empty or in which the data element of each node has a key, and:

Analysis of a Search Algorithm

Data Structures using OOP C++ Lecture 1

Algorithms and Data Structures Exercise for the Final Exam (17 June 2014) Stack, Queue, Lists, Trees, Heap

Short Notes on Dynamic Memory Allocation, Pointer and Data Structure

AP Computer Science Java Mr. Clausen Program 9A, 9B

Data Structures and Data Manipulation

1 Abstract Data Types Information Hiding

Matrix Multiplication

5. A full binary tree with n leaves contains [A] n nodes. [B] log n 2 nodes. [C] 2n 1 nodes. [D] n 2 nodes.

CSE 211: Data Structures Lecture Notes VII

COMPUTER SCIENCE. Paper 1 (THEORY)

Molecular Dynamics Simulations with Applications in Soft Matter Handout 7 Memory Diagram of a Struct

Linked Lists Linked Lists, Queues, and Stacks

Linked Lists, Stacks, Queues, Deques. It s time for a chainge!

Lab Experience 17. Programming Language Translation

Data Structures Using C++ 2E. Chapter 5 Linked Lists

C Dynamic Data Structures. University of Texas at Austin CS310H - Computer Organization Spring 2010 Don Fussell

C++FA 5.1 PRACTICE MID-TERM EXAM

CS 2412 Data Structures. Chapter 2 Stacks and recursion

Scoping (Readings 7.1,7.4,7.6) Parameter passing methods (7.5) Building symbol tables (7.6)

Two-Dimensional Arrays Summer 2010 Margaret Reid-Miller

Data Structure with C

VB.NET Programming Fundamentals

Data Structures Using C++

Stack & Queue. Darshan Institute of Engineering & Technology. Explain Array in detail. Row major matrix No of Columns = m = u2 b2 + 1

List, Stack and Queue. Tom Chao Zhou CSC2100B Data Structures Tutorial 3

10CS35: Data Structures Using C

How To Write An Array In A Microsoft Zil

Introduction to Object-Oriented Programming

Masters programmes in Computer Science and Information Systems. Object-Oriented Design and Programming. Sample module entry test xxth December 2013

PES Institute of Technology-BSC QUESTION BANK

1. What are Data Structures? Introduction to Data Structures. 2. What will we Study? CITS2200 Data Structures and Algorithms

Common Data Structures

PART-A Questions. 2. How does an enumerated statement differ from a typedef statement?

arrays C Programming Language - Arrays

Help on the Embedded Software Block

Illustration 1: Diagram of program function and data flow

Questions 1 through 25 are worth 2 points each. Choose one best answer for each.

C++ DATA STRUCTURES. Defining a Structure: Accessing Structure Members:

Reduced echelon form: Add the following conditions to conditions 1, 2, and 3 above:

Introduction to SQL for Data Scientists

The Relational Data Model

Numerical Algorithms Group

Chapter 6: Physical Database Design and Performance. Database Development Process. Physical Design Process. Physical Database Design

Lecture Notes on Binary Search Trees

Sources: On the Web: Slides will be available on:

Solving Systems of Linear Equations Using Matrices

1. The memory address of the first element of an array is called A. floor address B. foundation addressc. first address D.

In This Lecture. SQL Data Definition SQL SQL. Notes. Non-Procedural Programming. Database Systems Lecture 5 Natasha Alechina

Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C

Answers to Review Questions Chapter 7

Circuits 1 M H Miller

Storage Classes CS 110B - Rule Storage Classes Page 18-1 \handouts\storclas

MATHEMATICS FOR ENGINEERS BASIC MATRIX THEORY TUTORIAL 2

Data Structures and Algorithms(5)

Introduction to Data Structures

Services. Relational. Databases & JDBC. Today. Relational. Databases SQL JDBC. Next Time. Services. Relational. Databases & JDBC. Today.

Node-Based Structures Linked Lists: Implementation

Converting a Number from Decimal to Binary

Threads Scheduling on Linux Operating Systems

Embedded Systems. Review of ANSI C Topics. A Review of ANSI C and Considerations for Embedded C Programming. Basic features of C

The following themes form the major topics of this chapter: The terms and concepts related to trees (Section 5.2).

Module 2 Stacks and Queues: Abstract Data Types

KITES TECHNOLOGY COURSE MODULE (C, C++, DS)

>

LINKED DATA STRUCTURES

CmpSci 187: Programming with Data Structures Spring 2015

West Virginia University College of Engineering and Mineral Resources. Computer Engineering 313 Spring 2010

Bangalore University B.Sc Computer Science Syllabus ( Semester System)

Object-Oriented Design Lecture 4 CSU 370 Fall 2007 (Pucella) Tuesday, Sep 18, 2007

Tutorial on C Language Programming

Implementation Aspects of OO-Languages

BCS2B02: OOP Concepts and Data Structures Using C++

3 - Lift with Monitors

5 Arrays and Pointers

SQLITE C/C++ TUTORIAL

AP Computer Science Java Subset

Sample Questions Csci 1112 A. Bellaachia

HSL and its out-of-core solver

Stack Allocation. Run-Time Data Structures. Static Structures

Object Oriented Software Design II

COMPUTER SCIENCE 1999 (Delhi Board)

Ordered Lists and Binary Trees

Programming languages C

Transcription:

Lecture 11 Array of Linked Lists In this lecture Array of Linked Lists Creating an Array of Linked Lists Representing a Sparse Matrix Defining a Node for Sparse Matrix Exercises Solutions An Array of Linked Lists A linked list is defined as a collection of nodes that can be traversed starting at the head node. It is important to note that head is not a node, rather the address of the first node of the list. Linked lists are very useful in situations where the program needs to manage memory very carefully and a contiguous block of memory is not needed. An array of linked lists is an important data structure that can be used in many applications. Conceptually, an array of linked lists looks as follows. An array of linked list is an interesting structure as it combines a static structure (an array) and a dynamic structure (linked lists) to form a useful data structure. This type of a structure is appropriate for applications, where say for example, number of categories is known in advance, but how many nodes in each category is not known. For example, we can use an array (of size 26) of linked lists, where each list contains words starting with a specific letter in the alphabet.

The following code can be used to create an array of linked lists as shown in the figure above. Assume that all variables are declared. node* A[n] ; // defines an array of n node pointers for (i=0; i<n; i++) A[i] = NULL; // initializes the array to NULL Creating an Array of Linked Lists Suppose that a linked list needs to be created starting at A[i]. The first node can be created as follows. A[i] = (node*)malloc(sizeof(node)); // allocate memory for node A[i] size = 10; A[i] name = (char*) malloc(strlen( guna +1)); strcpy(a[i] name, guna\0 ); A[i] next = NULL; Now to insert more nodes into the list let us assume that we have a function insertnodes with the following prototype. int inserrnodes(node*** arrayhead, int index, node* ptr); Here we pass the address of the array of node*, a pointer to a node, and the array index. A call to the function can be as follows. node* ptr = (node*)malloc(sizeof(node)); ptr size = 10; ptr name = (char*) malloc(strlen( guna +1)); strcpy(ptr name, guna\0 ); ptr next = NULL; insertnodes(&a, ptr, 3); // insert node ptr to array location 3. In lab 4, we will implement a sparse matrix, a matrix where most entries are zero using a structure as follows.

Representing a Sparse Matrix A suggested data structure to implement the above is given by two structs, node and matrix. typedef struct node { int row, column, double value; struct node* rowptr; struct node* colptr; node; The node is a self-referencing structure that can be used to form nodes in a linked list. The matrix component of the data structure is a struct that contains two arrays of node pointers, each pointing to first element in a row or column. The overall matrix is stored in a structure as follows.

Defining a Sparse Matrix Node typedef struct matrix { node** rowlist; // rowlist is a pointer to the array of rows node** columnlist; // column list is a pointer to the array of columns. int rows, columns; // store the number of rows and columns of the matrix matrix; rowlist m columnlist n node In the structure above, we are using two arrays of linked nodes to create a structure that can be traversed starting from any row index or column index. Although the above structure seems complicated to implement, once we understand that each linked list is a separate singly linked list, it becomes easy to think about this and implement this structure. When a new node needs to be inserted, we must traverse the list from corresponding row index and corresponding column index and then link the node into the structure. You can use same logic in both cases, except that row indices are traversed and linked using the row_ptr and columns are traversed and linked using the column_ptr.

EXERCISES 1. Suppose M is a matrix*, where matrix is as defined above. Write code to allocate enough space to initialize a matrix of n by m. 2. Given a pointer to a node called ptr (assume all memory is allocated and node initialized), write code to insert the node to the beginning of the each list. 3. Write a function int duplicatevalue(matrix* M, double value) that returns 1 if a node with the value exists in the matrix. Return 0 if not. 4. Write a function int resize(matrix**) that doubles the rows and columns of the matrix. The old nodes need to be copied to the new matrix. Return 0 if success, 1 if failure. 5. Write a function int transpose(matrix**) that takes the transpose of the matrix. Transpose of a matrix M is defined as a matrix M1 where rows of M are equivalent to columns of M1 and columns of M are equivalent to rows of M1. For example the transpose of M = {{1,2,{3,4 is M1 = {{1,3,{2,4

SOLUTIONS 1. Suppose M is a matrix*, where matrix is as defined above. Write code to allocate enough space to initialize a matrix of n by m. matrix* M = malloc(sizeof(matrix)); M->rowList = malloc(n*sizeof(node*)); M->colList = malloc(m*sizeof(node*)); 2. Given a pointer to a node called ptr (assume all memory is allocated and node initialized), write code to insert the node to the beginning of the each list. for (i=0; i<n;i++) { ptr -> next = A[i] ; A[i] = ptr; 6. Write a function int duplicatevalue(matrix* M, double value) that returns 1 if a node with the value exists in the matrix. Return 0 if not. int duplicatevalue(matrix* M, double value) { int i=0; for (i=0; i<m->rows; i++) { node* head = M->rowList[i]; while (head!= NULL) { if (head->value == value) return 1; head = head -> next; return 0; 3. Write a function int resize(matrix**) that doubles the rows and columns of the matrix. The old nodes need to be copied to the new matrix. Return 0 if success, 1 if failure. int resize(matrix** M){ (*M)->rowList = realloc((*m)->rowlist, 2*M->rows); (*M)->colList = realloc((*m)->collist, 2*M->cols);

4. Write a function int transpose(matrix**) that converts the matrix to its transpose. Transpose of a matrix M is defined as a matrix M1 where rows of M are equivalent to columnsof M1 and columns of M are equivalent to rows of M1. For example the transpose of M = {{1,2,{3,4 is M1 = {{1,3,{2,4 int transpose(matrix** M) { node** tmp = (*M)->rowList; (*M)->rowList = (*M)->colList; (*M)->colList = tmp; int temp = (*M)->rows; (*M)->rows = (*M)->cols;