# Lecture 22, ECE264, Spring 2012, Prof. Lu

John Ribeiro - Professor Lu 8:30 - 9:20 - Lesson 22

Node * List_serach ( NOde * led, int v ) {

 while ( ( led != NULL ) && ( ( led->value ) != v ) )
{
led = led -> next;
}
return led;


}

/* Remember to check if the pointer is equal to NULL. This makes sure that the list exists in the first place. */

Node * List_InsertFront ( Node * head, int v ) {

 Node * n = Node_construct(v);
return n;


}

Node * List_insertEnd ( Node * head, int v ) {

 Node * n = Node_construct(v);
if ( head == NULL )
{
return n;
}


/* If the list is empty create only one node */

 Node * p = head;

 while ( ( p->next) != NULL )
{
p = p -> next;
}
p->next = n;


}

Node * List_delete ( Node * head, int v ) {

 if ( head == NULL )
{
return NULL;
}

 Node * p = head;

 while ( ( q != NULL ) && ( ( q->value) != v ) )
{
p = q;
q = q->next;
}

 if ( q != NULL )
{
p->next = q->next;
free ( q );
}

 return head;


}

• Exam 2 -> 8 - 10 PM this Thursday **

EE 206/207 open book and open note Will cover: 1) File 2) Structure 3) Linked List 4) Recursion

Possibly more questions and 1.5 times longer than exam 1

In main:

Node * p; p = List_search ( head, 6 );

if ( p != NULL ) {

 /* The value is found */


}

4/3/2012 Lecture 22_Kailu Song

Node *List_search(Node *t, int v) { while((t != NULL) && (t->value) != v) { t = t->next; } return t; }

Node *List_insertFront(Node *head, int v) { Node *n = Node_construct(v); n->next = head; return n; }

Node *List_insertEnd(Node *t, int v) { Node *n = Node_construct(v); if (t == NULL) { return n; } Node *p = t; while ((p->next) != NULL) { p = p-> next; } return t; }

Node *List_delete(Node *head, int v) { if (head == NULL) { return NULL; } Node *p = head; if ((head ->value) == v) { p = head -> next; free(head); return p; } }

Node *q = p-> next;/*p is not NULL */ while ((q != NULL)&&(q ->value) != v) { p = q; q = q->next; } if (q != NULL) { p->next = q -> next; free(q); } return head; }

4/4/2012 Huayi Guo Lecture 22 Professor Niklas Elmqvist

/*

 exam

Q1: file I/O;
Q2: structure;
Q4: recursion;
BE SURE TO LOOK AT YOUR ASSIGNMENTS AND EXERCISES

shallow vs deep copy

DEEP COPY is when you are copying not only of the pointer but also the contents that the pointer
is pointing to.

Example:
*/
typedef enum{ MALE, FEMALE }Gender;
struct Person{
char * first;
char * last;
Gender gender;

}Person;

Person Person_create(char * first, char * last, int age, Gender gender)
{
Person person;


person.first = strdup(first); person.last = strdup(last); person.age = age; person.gender = gender; return person;

 }

void Person_destroy(Person person)
{
//you need to free the thing that created by strdup!!
free(person.first);


free(person.last);

 }
Person_copy(Person person)
{
return Person_create(preson.first, person.last,


person.age, person.gender);

 }

 Person_addSuffix(Person person, char *middler)
{
char * tmp = malloc(strlen(person->last)_ strlen())

}

Person_print(Person person)
{
printf("first: %s, last %s, age: %d, gender: %s\n", person.first, person. last, person.age,


(person.gender == MALE ? "male":"female"));

 }

int main(int argc, char: argv[])
{
if(argc != 5){


return EXIT_FAILURE; }

int age = strtol(argv[3], NULL, 10); Gender gender = (strcmp(argv[4],"male")==0) ? MALE: FEMALE Person person1 = Person_create(argv[1], argv[2], age, gender);

     Pereon person2 = Person_copy(person1); //deep copy
//Person person2 = person1 ;//shallow copy

Person_print(person1);


Person_print(person2);

Person_destroy(person1); // Since person2 is deep copy you need to free it // If you do shallow copy then you DONT need to free it, //otherwise it's a segmentation fault Person_destroy(person2);

return EXIT_SUCCESS;

}


/*

• /
###### ===================

Kevin Tan(0023987592), section#2 notes 04/05

random access

arr[5]; arr[9];

FILE *fp= NULL; fp = fopen(filename,"rb");

____________________________________________________________________

Shiyu Wang ECE264 LEC22 April 8th

 while((head!=NULL)&&((head->value)!=v))
{
}


}

 Node*n=Node_construct(v);
return n;


}

 Node* n=Node_construct(v);
{
return n;
}
while((p->next)!=NULL)
{
P=P->next;
}
p->next=n;


}

 if(head==NULL)
{
return NULL;
}
{
return p;
}
Node*q=p->next;
while((q!=NULL)&&(q->value)!=v))
{
p=q;
q=q->next;
}
if(q!=NULL)
{
p->next=q->next;
free(q);
}


}

main {

 Node*head=NULL;
Node*p;
if(p!=NULL)
{
//found it
}
return 0;


}

Wudi Zhou, Professor Lu's section, Lecture 22, April 9th

static Node * Node_construct(int v) { Node * n = malloc(sizeof(Node)); n -> value = v; n -> next = 0; return n; }

Node * List_insert(Node * head, int v) { printf("insert %d\n", v); Node * p = Node_construct(v); p -> next = head; return p; }

Node * List_search(Node * head, int v) { Node * p = head; while (p != NULL)

{
if ((p -> value) == v)
{
return p;
}
p = p -> next;
}
return p;


}

Node * List_delete(Node * head, int v) {

printf("delete %d\n", v);
if (p == NULL) /* empty list, do nothing */
{
return p;
}
if ((p -> value) == v)
{
p = p -> next;
return p;
}


Node * q = p -> next; while ((q != NULL) && ((q -> value) != v)) {

 p = p -> next;
q = q -> next;


} if (q != NULL) {

p -> next = q -> next;
free (q);


}

return head;
}
{
{
Node * p = head -> next;
}
}

###### =================

Hanye Xu Lec22

Node *List_search(Node *t, int v) { while((t != NULL) && (t->value) != v) { t = t->next; } return t; }

Node *List_insertFront(Node *head, int v) { Node *n = Node_construct(v); n->next = head; return n; }

Node *List_insertEnd(Node *t, int v) { Node *n = Node_construct(v); if (t == NULL) { return n; } Node *p = t; while ((p->next) != NULL) { p = p-> next; } return t; }

Node *List_delete(Node *head, int v) { if (head == NULL) { return NULL; } Node *p = head; if ((head ->value) == v) { p = head -> next; free(head); return p; } }

Node *q = p-> next;/*p is not NULL */ while ((q != NULL)&&(q ->value) != v) { p = q; q = q->next; } if (q != NULL) { p->next = q -> next; free(q); } return head; }

###### ===============

Rohan Khante

Node *List_search(Node *t, int v) {

while((t != NULL) && (t->value) != v)


{

t = t->next;


} return t;

}


The while loop here makes sure that the Node is not empty and continues till the value in the node is NOT v. When it comes to t->value == v the t has got incremented and t is returned.

Node *List_insertFront(Node *head, int v) {

Node *n = Node_construct(v);

return n;

} Over here you create a node using the node_construct function. The next location of n is pointed to head and then the head is returned. In main the function call looks like head = List_InsertFront(*head,v); Thus head value gets changed to n. Thus a new element is added at the start of the list.

Node *List_insertEnd(Node *t, int v)

{

Node *n = Node_construct(v);

if (t == NULL)

{

return n;

}

Node *p = t;

while ((p->next) != NULL)

{ p = p-> next; }

return t;

} Here a Node is again created using the Node_construct function. If loop ensured that the node being passed into the function is not NULL pointer. Here p pointer is incremented till it reaches the end of list. Note like previous function(add at start) you do not need to change the head function

{

return NULL;

}

{

return p;

}

}

Node *q = p-> next;/*p is not NULL */

while ((q != NULL)&&(q ->value) != v)

{ p = q; q = q->next; }

if (q != NULL)

{ p->next = q -> next;

free(q);

}