Double Linked List Operations Dr. David Tsai 2010/4/12.

Post on 30-Mar-2015

221 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

Transcript

Double Linked List Operations

Dr. David Tsai2010/4/12

void createDList (int len, int*array) { int i; DList newnode, before; first = (DList) malloc (sizeof (DNode) ); first->data = array[0]; first->previous = first->next = NULL; before = first /*now = first; */ for (i = 1; i < len; i++) { newnode = (DList) malloc (sizeof(Dnode) ); newnode->data = array[i]; newnode->next = NULL; newnode->previous = before; before->next = newnode; before = newnode; }}

修改自教科書:資料結構理論與實務以 C語言實作 /陳會安

60

first

NULLNULL

before

50

newnode

NULL

40

NULL

void printDList () { DList now = first; while (now! = NULL) { back = now; printf (%d, now->data); now = now->next; } printf (\n); now = back->previous; while (now! = NULL) { back = now; printf (%d, now->data); now = now->previous; } printf (\n);}

now

60

first

NULL

50

NULL

40

back

void deleteDNode (DList ptr) { if (ptr->previous == NULL) { first = first->next; first->previous = NULL; } else { if (ptr->next == NULL) { ptr->previous->next = NULL; } else{ ptr->previous->next = ptr->next; ptr->next->previous = ptr->previous; } } free (ptr); }

ptr

60

first

NULL

50

NULL

30 2040

NULL

To Delete First Node

ptr

60

first

NULL

50

NULL

30 2040

To Delete Last Node

NULL

ptr

60

first

NULL

50

NULL

30 2040

To Delete a Middle Node

void insertDNode (DList ptr, int d) { DList newnode = (DList) malloc (sizeof (DNode) ) ; newnode->data = d; newnode->next = newnode->previous = NULL; if (first == NULL) { first = newnode; }

if (ptr == NULL) { newnode->previous = NULL; newnode->next = first; first->previous = newnode; first = newnode; } else { if (ptr->next == NULL) { ptr->next = newnode; newnode->previous = ptr; newnode->next = NULL; } else { ptr->next->previous = newnode; newnode->next = ptr->next; newnode->previous = ptr; ptr->next = newnode; } }}

50

first

=40

newnode

==

==

60

ptr

= =

To Create a Double Linked ListTo Insert a New Node at Front of the First NodeTo Insert a New Node at End of the Last Node

50

first

40

newnode

=

=

=

60

ptr

=55

To Insert a New Node into the Middle of the List

top related