17
Binghamton University CS-211 Fall 2015 Data Structures 1

Data Structures - Binghamtontbarten1/CS211_Fall_2015...Binghamton University CS-211 Fall 2015 Using Pointers to Link Structures •There is an exception to the “define before used”

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Data Structures - Binghamtontbarten1/CS211_Fall_2015...Binghamton University CS-211 Fall 2015 Using Pointers to Link Structures •There is an exception to the “define before used”

Binghamton

University

CS-211

Fall 2015

Binghamton

University

CS-211

Fall 2015

Data Structures

1

Page 2: Data Structures - Binghamtontbarten1/CS211_Fall_2015...Binghamton University CS-211 Fall 2015 Using Pointers to Link Structures •There is an exception to the “define before used”

Binghamton

University

CS-211

Fall 2015

Binghamton

University

CS-211

Fall 2015

Using Pointers to Link Structures

• There is an exception to the “define before used” rule.

• You may reference a structure in its own definition.

• It is common to use pointers to otherinstances of the same structure

2

Page 3: Data Structures - Binghamtontbarten1/CS211_Fall_2015...Binghamton University CS-211 Fall 2015 Using Pointers to Link Structures •There is an exception to the “define before used”

Binghamton

University

CS-211

Fall 2015

Binghamton

University

CS-211

Fall 2015

Example of a linked list Node structure

struct node {

int value;

struct node *next;

};

3

value next

344 0x00c0 0010

value next

561 0x0000 0000

Page 4: Data Structures - Binghamtontbarten1/CS211_Fall_2015...Binghamton University CS-211 Fall 2015 Using Pointers to Link Structures •There is an exception to the “define before used”

Binghamton

University

CS-211

Fall 2015

Binghamton

University

CS-211

Fall 2015

Linked List

• List of nodes

• Each node has a value or payload

• Each node has a “next” pointer

• First node in the list is the head node• Special variable “head” points to the first nodestruct node *head;

• Last node is the tail node• Tail node “next” pointer is NULL (0x0000 0000)

• Empty list when head==NULL

4

Page 5: Data Structures - Binghamtontbarten1/CS211_Fall_2015...Binghamton University CS-211 Fall 2015 Using Pointers to Link Structures •There is an exception to the “define before used”

Binghamton

University

CS-211

Fall 2015

Binghamton

University

CS-211

Fall 2015

Why a Linked List?

• It’s easy to insert in a linked list

• For example, suppose I want to insert a node with the value 490 between 344 and 561…

5

Page 6: Data Structures - Binghamtontbarten1/CS211_Fall_2015...Binghamton University CS-211 Fall 2015 Using Pointers to Link Structures •There is an exception to the “define before used”

Binghamton

University

CS-211

Fall 2015

Binghamton

University

CS-211

Fall 2015

Example Linked List

6

value next

344 0x00c0 0010

value next

561 0x00c0 0020

head

0x00c0 0018

value next

720 0x0000 0000

value next

490

Page 7: Data Structures - Binghamtontbarten1/CS211_Fall_2015...Binghamton University CS-211 Fall 2015 Using Pointers to Link Structures •There is an exception to the “define before used”

Binghamton

University

CS-211

Fall 2015

Binghamton

University

CS-211

Fall 2015

Example Linked List

7

value next

344

value next

561 0x00c0 0020

head

0x00c0 0018

value next

720 0x0000 0000

value next

490 0x00c0 0010

Page 8: Data Structures - Binghamtontbarten1/CS211_Fall_2015...Binghamton University CS-211 Fall 2015 Using Pointers to Link Structures •There is an exception to the “define before used”

Binghamton

University

CS-211

Fall 2015

Binghamton

University

CS-211

Fall 2015

Example Linked List

8

value next

344 0x00c0 0028

value next

561 0x00c0 0020

head

0x00c0 0018

value next

720 0x0000 0000

value next

490 0x00c0 0010

Page 9: Data Structures - Binghamtontbarten1/CS211_Fall_2015...Binghamton University CS-211 Fall 2015 Using Pointers to Link Structures •There is an exception to the “define before used”

Binghamton

University

CS-211

Fall 2015

Binghamton

University

CS-211

Fall 2015

Example Insertion Function

void insertNode(struct node *after, struct node*new) {

new->next=after->next;

after->next=new;

}

9

Page 10: Data Structures - Binghamtontbarten1/CS211_Fall_2015...Binghamton University CS-211 Fall 2015 Using Pointers to Link Structures •There is an exception to the “define before used”

Binghamton

University

CS-211

Fall 2015

Binghamton

University

CS-211

Fall 2015

Example of Insertion to Vector

void insertVector(int vec[],int new,int position, int num) {

int j;

for(j=num; j>pos; j--) {

vec[j]=vec[j-1]; // move everything over 1

}

vec[pos]=new;

}

10

Page 11: Data Structures - Binghamtontbarten1/CS211_Fall_2015...Binghamton University CS-211 Fall 2015 Using Pointers to Link Structures •There is an exception to the “define before used”

Binghamton

University

CS-211

Fall 2015

Binghamton

University

CS-211

Fall 2015

Dynamic Node Allocation/Free

struct node * makeNode(int value) {

struct node * np=

(struct node *)malloc(sizeof(struct node));

np->value=value;

np->next=NULL;

return np;

}

void freeNode(struct node * np) { free(np); }

11

Page 12: Data Structures - Binghamtontbarten1/CS211_Fall_2015...Binghamton University CS-211 Fall 2015 Using Pointers to Link Structures •There is an exception to the “define before used”

Binghamton

University

CS-211

Fall 2015

Binghamton

University

CS-211

Fall 2015

The Stack

Page 13: Data Structures - Binghamtontbarten1/CS211_Fall_2015...Binghamton University CS-211 Fall 2015 Using Pointers to Link Structures •There is an exception to the “define before used”

Binghamton

University

CS-211

Fall 2015

Binghamton

University

CS-211

Fall 2015

Implementing a Stack with a Linked List

struct node *head=NULL;

void push(int value) {

struct node *np=

makeNode(value);

np->next=head;

head=np;

}

int pop() {

assert(head);

struct node *np=head;

head=np->next;

int val=np->value;

freeNode(np);

return val;

}

13

Page 14: Data Structures - Binghamtontbarten1/CS211_Fall_2015...Binghamton University CS-211 Fall 2015 Using Pointers to Link Structures •There is an exception to the “define before used”

Binghamton

University

CS-211

Fall 2015

Binghamton

University

CS-211

Fall 2015

Tree Data Structure

struct tnode {

char nodeType;

char nodeValue;

struct tnode *nodeOperand1;

struct tnode *nodeOperand2;

};

14

nodeType nodeValue

& -1

nodeOperand1 nodeOperand2

0x00c0 0030 0x00c0 0040

nodeType nodeValue

S A

nodeOperand1 nodeOperand2

0x0000 0000 0x0000 0000

Page 15: Data Structures - Binghamtontbarten1/CS211_Fall_2015...Binghamton University CS-211 Fall 2015 Using Pointers to Link Structures •There is an exception to the “define before used”

Binghamton

University

CS-211

Fall 2015

Binghamton

University

CS-211

Fall 2015

And so on…

• The possibilities are almost endless• Doubly linked lists

• Circularly linked lists

• Directed Graphs with Nodes/Vertices

• Trees with “n” branches (multi-way trees)

• All possible because of self-referential pointers!

15

Page 16: Data Structures - Binghamtontbarten1/CS211_Fall_2015...Binghamton University CS-211 Fall 2015 Using Pointers to Link Structures •There is an exception to the “define before used”

Binghamton

University

CS-211

Fall 2015

Binghamton

University

CS-211

Fall 2015

Resources

• Wikipedia Linked List https://en.wikipedia.org/wiki/Linked_list

• Wikipedial Data Structure https://en.wikipedia.org/wiki/Data_structure

• Linked List Tutorial http://www.learn-c.org/en/Linked_lists

16

Page 17: Data Structures - Binghamtontbarten1/CS211_Fall_2015...Binghamton University CS-211 Fall 2015 Using Pointers to Link Structures •There is an exception to the “define before used”

Binghamton

University

CS-211

Fall 2015

Binghamton

University

CS-211

Fall 2015

Pop Quiz 3

1. The C expression “int *xyz;” results in an xyz that can be thought of as (choose all that apply)…a) A pointer to a string

b) A pointer to a single character

c) A pointer to a floating point value

d) A pointer to a vector of characters

e) None of the above

2. After the expression “int nums[4]={10,11,12,13};”, what is the value of nums[2]?

17