Download presentation

Presentation is loading. Please wait.

1
**CSCE 3110 Data Structures & Algorithm Analysis**

Rada Mihalcea More on lists. Circular lists. Doubly linked lists.

2
**Applications of Linked Lists**

Stacks and Queues Implemented with Linked Lists Polynomials Implemented with Linked Lists Remember the array based implementation? Hint: two strategies, one efficient in terms of space, one in terms of running time

3
**Operations on Linked Lists**

Running time? insert, remove traverse, swap How to reverse the elements of a list?

4
**Polynomials Representation typedef struct poly_node *poly_pointer;**

int coef; int expon; poly_pointer next; }; poly_pointer a, b, c; coef expon link

5
Example a null b -3 10 null

6
**Adding Polynomials 3 14 2 8 1 0 a 8 14 -3 10 10 6 b 11 14**

2 8 1 0 a -3 10 b 11 14 a->expon == b->expon d 2 8 1 0 a -3 10 b 11 14 -3 10 a->expon < b->expon d

7
**Adding Polynomials (cont’d)**

2 8 1 0 a -3 10 b 11 14 -3 10 2 8 d a->expon > b->expon

8
**Adding Polynomials (cont’d)**

poly_pointer padd(poly_pointer a, poly_pointer b) { poly_pointer front, rear, temp; int sum; rear =(poly_pointer)malloc(sizeof(poly_node)); if (IS_FULL(rear)) { fprintf(stderr, “The memory is full\n”); exit(1); } front = rear; while (a && b) { switch (COMPARE(a->expon, b->expon)) {

9
**case -1: /* a->expon < b->expon */**

attach(b->coef, b->expon, &rear); b= b->next; break; case 0: /* a->expon == b->expon */ sum = a->coef + b->coef; if (sum) attach(sum,a->expon,&rear); a = a->next; b = b->next; case 1: /* a->expon > b->expon */ attach(a->coef, a->expon, &rear); a = a->next; } for (; a; a = a->next) for (; b; b=b->next) rear->next = NULL; temp = front; front = front->next; free(temp); return front;

10
**Analysis (1) coefficient additions 0 additions min(m, n)**

where m (n) denotes the number of terms in A (B). (2) exponent comparisons extreme case em-1 > fm-1 > em-2 > fm-2 > … > e0 > f0 m+n-1 comparisons (3) creation of new nodes m + n new nodes summary O(m+n)

11
**Attach a Term void attach(float coefficient, int exponent,**

poly_pointer *ptr) { /* create a new node attaching to the node pointed to by ptr. ptr is updated to point to this new node. */ poly_pointer temp; temp = (poly_pointer) malloc(sizeof(poly_node)); if (IS_FULL(temp)) { fprintf(stderr, “The memory is full\n”); exit(1); } temp->coef = coefficient; temp->expon = exponent; (*ptr)->next = temp; *ptr = temp;

12
Other types of lists: Circular lists Doubly linked lists

13
**Circularly linked lists**

circular list vs. chain ptr 2 8 1 0 avail ptr temp avail ...

14
**Operations in a circular list**

What happens when we insert a node to the front of a circular linked list? X X X a Problem: move down the whole list. A possible solution: X X X a Keep a pointer points to the last node.

15
**Insertion ptr (2) (1) void insertFront (pnode* ptr, pnode node) {**

/* insert a node in the list with head (*ptr)->next */ if (IS_EMPTY(*ptr)) { *ptr= node; node->next = node; /* circular link */ } else { node->next = (*ptr)->next; (1) (*ptr)->next = node; (2) X X X ptr (2) (1)

16
**List length int length(pnode ptr) { pnode temp; int count = 0;**

if (ptr) { temp = ptr; do { count++; temp = temp->next; } while (temp!=ptr); } return count;

17
Doubly Linked List Keep a pointer to the next and the previous element in the list typedef struct node *pnode; typedef struct node { char data [4]; pnode next; pnode prev; }

18
Doubly Linked List Keep a header and trailer pointers (sentinels) with no content header.prev = null; header.next = first element trailer.next = null; trailer.prev = last element Update pointers for every operation performed on the list How to remove an element from the tail of the list ?

19
**Doubly Linked List – removeLast()**

Running time? How does this compare to simply linked lists?

20
Doubly Linked List insertFirst swapElements

21
**Revisit Sparse Matrices**

Previous scheme: represent each non-NULL element as a tuple (row, column, value) New scheme: each column (row): a circular linked list with a head node

22
**Nodes in the Sparse Matrix**

down col row right entry node value i j aij aij

23
**Linked Representation**

4 4 2 11 1 1 1 12 5 2 1 -4 3 3 -15 Circular linked list

24
**Sparse Matrix Implementation**

#define MAX_SIZE 50 /* size of largest matrix */ typedef struct mnode *pmnode; typedef struct mnode { int row; int col; int value; pmnode next, down; }; Operations on sparse matrices

Similar presentations

OK

Data Structure Lecture-3 Prepared by: Shipra Shukla Assistant Professor Kaziranga University.

Data Structure Lecture-3 Prepared by: Shipra Shukla Assistant Professor Kaziranga University.

© 2018 SlidePlayer.com Inc.

All rights reserved.

To make this website work, we log user data and share it with processors. To use this website, you must agree to our Privacy Policy, including cookie policy.

Ads by Google