ex13-1.c
/* code: ex13-1.c (v1.20.00) */
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
};
typedef struct node NODE_TYPE;
/* ------------------------------------------- */
void linked_list_print (NODE_TYPE *node)
{
while (NULL != node) {
printf ("%d ", node->data);
node = node->next;
}
printf ("\n");
}
/* ------------------------------------------- */
int main ()
{
NODE_TYPE *node;
node = malloc (sizeof (NODE_TYPE));
node->data = 300;
node->next = malloc (sizeof (NODE_TYPE));
node->next->data = 400;
node->next->next = malloc (sizeof (NODE_TYPE));
node->next->next->data = 500;
node->next->next->next = malloc (sizeof (NODE_TYPE));
node->next->next->next->data = 600;
node->next->next->next->next = NULL;
linked_list_print (node);
return 0;
}
ex13-2.c
/* code: ex13-2.c (v1.20.00) */
#include<stdio.h>
#include<stdlib.h>
#define NOT_FOUND (-1)
#define DATA_SIZE 6
struct node
{
int data;
struct node *next;
};
typedef struct node NODE_TYPE;
/* ------------------------------------------- */
void linked_list_insert_head (NODE_TYPE **head, int data)
{
NODE_TYPE *new_node;
new_node = malloc (sizeof (NODE_TYPE));
new_node->data = data;
if (*head == NULL) {
new_node->next = NULL;
*head = new_node;
}
else {
new_node->next = *head;
*head = new_node;
}
}
/* ------------------------------------------- */
void linked_list_print (NODE_TYPE *head)
{
printf ("Linked_list [ ");
while (NULL != head) {
printf ("%02d ", head->data);
head = head->next;
}
printf ("]\n");
}
/* ------------------------------------------- */
int main ()
{
NODE_TYPE *head;
int i, data1;
head = NULL;
for (i = 0; i < DATA_SIZE; i++) {
data1 = (int) rand () % 100;
printf ("inserting (head): ");
printf ("%02d\n", data1);
linked_list_insert_head (&head, data1);
}
linked_list_print (head);
return 0;
}
ex13-3.c
/* code: ex13-3.c (v1.20.00) */
#include<stdio.h>
#include<stdlib.h>
#define NOT_FOUND (-1)
#define DATA_SIZE 6
struct node
{
int data;
struct node *next;
};
typedef struct node NODE_TYPE;
/* ------------------------------------------- */
int linked_list_delete_head (NODE_TYPE **head)
{
int data;
NODE_TYPE *temp;
if (*head == NULL) {
return NOT_FOUND;
}
data = (*head)->data;
temp = (*head);
*head = (*head)->next;
free (temp);
return data;
}
/* ------------------------------------------- */
void linked_list_insert_head (NODE_TYPE **head, int data)
{
NODE_TYPE *new_node;
new_node = malloc (sizeof (NODE_TYPE));
new_node->data = data;
if (*head == NULL) {
new_node->next = NULL;
*head = new_node;
}
else {
new_node->next = *head;
*head = new_node;
}
}
/* ------------------------------------------- */
void linked_list_print (NODE_TYPE *head)
{
printf ("Linked_list [ ");
while (NULL != head) {
printf ("%02d ", head->data);
head = head->next;
}
printf ("]\n");
}
/* ------------------------------------------- */
int main ()
{
NODE_TYPE *head;
int i, data1;
head = NULL;
for (i = 0; i < DATA_SIZE; i++) {
data1 = (int) rand () % 100;
printf ("inserting (head): ");
printf ("%02d\n", data1);
linked_list_insert_head (&head, data1);
}
linked_list_print (head);
for (i = 0; i < DATA_SIZE / 2; i++) {
printf ("deleting (head): ");
data1 = linked_list_delete_head (&head);
printf ("%02d\n", data1);
}
linked_list_print (head);
return 0;
}
ex13-4.c
/* code: ex13-4.c (v1.20.00) */
#include<stdio.h>
#include<stdlib.h>
#define NOT_FOUND (-1)
#define DATA_SIZE 6
struct node
{
int data;
struct node *next;
};
typedef struct node NODE_TYPE;
/* ------------------------------------------- */
int linked_list_search_node (NODE_TYPE *head, int key)
{
int i;
i = 0;
while (NULL != head) {
if (key == head->data) {
return i;
}
head = head->next;
i++;
}
return NOT_FOUND;
}
/* ------------------------------------------- */
int linked_list_length (NODE_TYPE *head)
{
int c;
c = 0;
while (NULL != head) {
head = head->next;
c++;
}
return c;
}
/* ------------------------------------------- */
void linked_list_print (NODE_TYPE *head)
{
printf ("Linked_list [ ");
while (NULL != head) {
printf ("%02d ", head->data);
head = head->next;
}
printf ("]\n");
}
/* ------------------------------------------- */
void linked_list_insert_head (NODE_TYPE **head, int data)
{
NODE_TYPE *new_node;
new_node = malloc (sizeof (NODE_TYPE));
new_node->data = data;
if (*head == NULL) {
new_node->next = NULL;
*head = new_node;
}
else {
new_node->next = *head;
*head = new_node;
}
}
/* ------------------------------------------- */
int linked_list_delete_head (NODE_TYPE **head)
{
int data;
NODE_TYPE *temp;
if (*head == NULL) {
return NOT_FOUND;
}
data = (*head)->data;
temp = (*head);
*head = (*head)->next;
free (temp);
return data;
}
/* ------------------------------------------- */
void linked_list_insert_tail (NODE_TYPE **head, int data)
{
NODE_TYPE *new_node;
NODE_TYPE *temp;
new_node = malloc (sizeof (NODE_TYPE));
new_node->data = data;
new_node->next = NULL;
if (*head == NULL) {
*head = new_node;
temp = new_node;
}
else {
temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = new_node;
}
}
/* ------------------------------------------- */
int linked_list_delete_tail (NODE_TYPE **head)
{
int data;
NODE_TYPE *temp;
NODE_TYPE *prev;
data = NOT_FOUND;
if (*head == NULL) {
return data;
}
else {
temp = *head;
prev = *head;
while (temp->next != NULL) {
prev = temp;
temp = temp->next;
}
data = temp->data;
if ((*head)->next == NULL) {
*head = NULL;
}
else {
prev->next = NULL;
}
free (temp);
}
return data;
}
/* ------------------------------------------- */
void linked_list_delete_all (NODE_TYPE **head)
{
NODE_TYPE *current;
NODE_TYPE *next;
current = *head;
while (current != NULL) {
next = current->next;
free (current);
current = next;
}
*head = NULL;
}
/* ------------------------------------------- */
int main ()
{
NODE_TYPE *head;
int i, data1;
head = NULL;
for (i = 0; i < DATA_SIZE; i++) {
data1 = (int) rand () % 100;
printf ("adding (head node): ");
printf ("%02d\n", data1);
linked_list_insert_head (&head, data1);
}
linked_list_print (head);
for (i = 0; i < DATA_SIZE; i++) {
data1 = (int) rand () % 100;
printf ("adding (tail node): ");
printf ("%02d\n", data1);
linked_list_insert_tail (&head, data1);
}
linked_list_print (head);
for (i = 0; i < DATA_SIZE / 2; i++) {
printf ("deleting (head node): ");
data1 = linked_list_delete_head (&head);
printf ("%02d\n", data1);
}
linked_list_print (head);
for (i = 0; i < DATA_SIZE / 2; i++) {
printf ("deleting (tail node): ");
data1 = linked_list_delete_tail (&head);
printf ("%02d\n", data1);
}
linked_list_print (head);
printf ("Length of the linked list :%d\n", linked_list_length (head));
printf ("deleting entire linked list\n");
linked_list_delete_all (&head);
linked_list_print (head);
return 0;
}
q13-1.c
/* code: q13-1.c (v1.20.00) */
#include<stdio.h>
#include<stdlib.h>
#define NOT_FOUND (-1)
#define DATA_SIZE 6
struct node
{
int data;
struct node *next;
};
typedef struct node NODE_TYPE;
/* ------------------------------------------- */
int linked_list_search_node (NODE_TYPE *head, int key)
{
int i;
i = 0;
while (NULL != head) {
if (key == head->data) {
return i;
}
head = head->next;
i++;
}
return NOT_FOUND;
}
/* ------------------------------------------- */
void linked_list_print (NODE_TYPE *head)
{
printf ("Linked_list [ ");
while (NULL != head) {
printf ("%02d ", head->data);
head = head->next;
}
printf ("]\n");
}
/* ------------------------------------------- */
void linked_list_insert_head (NODE_TYPE **head, int data)
{
NODE_TYPE *new_node;
new_node = malloc (sizeof (NODE_TYPE));
new_node->data = data;
if (*head == NULL) {
new_node->next = NULL;
*head = new_node;
}
else {
new_node->next = *head;
*head = new_node;
}
}
/* ------------------------------------------- */
int main ()
{
NODE_TYPE *head;
int i, data1, data2, stat;
head = NULL;
data2 = 0;
for (i = 0; i < DATA_SIZE; i++) {
data1 = (int) rand () % 100;
printf ("adding (head node): ");
printf ("%02d\n", data1);
linked_list_insert_head (&head, data1);
if (i == (DATA_SIZE / 2)) {
data2 = data1;
}
}
linked_list_print (head);
stat = linked_list_search_node (head, data2);
if (stat == NOT_FOUND) {
printf ("not found : %d", data2);
}
else {
printf ("found : %d (%d)", data2, stat);
}
return 0;
}
q13-2.c
/* code: q13-2.c (v1.20.00) */
#include<stdio.h>
#include<stdlib.h>
#define NOT_FOUND (-1)
#define DATA_SIZE 6
struct node
{
int data;
struct node *next;
};
typedef struct node NODE_TYPE;
/* ------------------------------------------- */
int linked_list_length (NODE_TYPE *head)
{
int c;
c = 0;
while (NULL != head) {
head = head->next;
c++;
}
return c;
}
/* ------------------------------------------- */
void linked_list_print (NODE_TYPE *head)
{
printf ("Linked_list [ ");
while (NULL != head) {
printf ("%02d ", head->data);
head = head->next;
}
printf ("]\n");
}
/* ------------------------------------------- */
void linked_list_insert_head (NODE_TYPE **head, int data)
{
NODE_TYPE *new_node;
new_node = malloc (sizeof (NODE_TYPE));
new_node->data = data;
if (*head == NULL) {
new_node->next = NULL;
*head = new_node;
}
else {
new_node->next = *head;
*head = new_node;
}
}
/* ------------------------------------------- */
int main ()
{
NODE_TYPE *head;
int i, data1;
head = NULL;
for (i = 0; i < DATA_SIZE; i++) {
data1 = (int) rand () % 100;
printf ("adding (head node): ");
printf ("%02d\n", data1);
linked_list_insert_head (&head, data1);
}
linked_list_print (head);
printf ("number of node(s): %d\n", linked_list_length (head));
return 0;
}
q13-3.c
/* code: q13-3.c (v1.20.00) */
#include<stdio.h>
#include<stdlib.h>
#define NOT_FOUND (-1)
#define DATA_SIZE 6
struct node
{
int data;
struct node *next;
};
typedef struct node NODE_TYPE;
/* ------------------------------------------- */
void linked_list_print (NODE_TYPE *head)
{
printf ("Linked_list [ ");
while (NULL != head) {
printf ("%02d ", head->data);
head = head->next;
}
printf ("]\n\n");
}
/* ------------------------------------------- */
void linked_list_insert_tail (NODE_TYPE **head, int data)
{
NODE_TYPE *new_node;
NODE_TYPE *temp;
new_node = malloc (sizeof (NODE_TYPE));
new_node->data = data;
new_node->next = NULL;
if (*head == NULL) {
*head = new_node;
temp = new_node;
}
else {
temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = new_node;
}
}
/* ------------------------------------------- */
int linked_list_delete_tail (NODE_TYPE **head)
{
int data;
NODE_TYPE *temp;
NODE_TYPE *prev;
data = NOT_FOUND;
if (*head == NULL) {
return data;
}
else {
temp = *head;
prev = *head;
while (temp->next != NULL) {
prev = temp;
temp = temp->next;
}
data = temp->data;
if ((*head)->next == NULL) {
*head = NULL;
}
else {
prev->next = NULL;
}
free (temp);
}
return data;
}
/* ------------------------------------------- */
int main ()
{
NODE_TYPE *head;
int i, data1;
head = NULL;
for (i = 0; i < DATA_SIZE; i++) {
data1 = (int) rand () % 100;
printf ("adding (tail node): ");
printf ("%02d\n", data1);
linked_list_insert_tail (&head, data1);
}
linked_list_print (head);
for (i = 0; i < DATA_SIZE; i++) {
printf ("deleting (tail node): ");
data1 = linked_list_delete_tail (&head);
printf ("%02d\n", data1);
}
linked_list_print (head);
return 0;
}
q13-4.c
/* code: q13-4.c (v1.20.00) */
#include<stdio.h>
#include<stdlib.h>
#define DATA_SIZE 10
struct node
{
int data;
struct node *next;
};
typedef struct node NODE_TYPE;
struct linked_list
{
NODE_TYPE *head;
NODE_TYPE *tail;
NODE_TYPE *current;
};
typedef struct linked_list LINKED_LIST;
/* ------------------------------------------- */
void linked_list_init (LINKED_LIST *list)
{
list->head = NULL;
list->tail = NULL;
list->current = NULL;
}
/* ------------------------------------------- */
void linked_list_insert_node_h (LINKED_LIST *list, int data)
{
NODE_TYPE *node;
node = malloc (sizeof (NODE_TYPE));
node->data = data;
if (NULL == list->head) {
list->tail = node;
node->next = NULL;
}
else {
node->next = list->head;
}
list->head = node;
}
/* ------------------------------------------- */
void linked_list_insert_node_t (LINKED_LIST *list, int data)
{
NODE_TYPE *node;
node = malloc (sizeof (NODE_TYPE));
node->data = data;
node->next = NULL;
if (NULL == list->head) {
list->head = node;
}
else {
list->tail->next = node;
}
list->tail = node;
}
/* ------------------------------------------- */
NODE_TYPE *linked_list_find_node (LINKED_LIST *list, int data)
{
NODE_TYPE *node;
node = list->head;
while (NULL != node) {
if (node->data == data) {
return node;
}
node = node->next;
}
return NULL;
}
/* ------------------------------------------- */
void linked_list_delete_node (LINKED_LIST *list, NODE_TYPE *node)
{
if (node == list->head) {
if (NULL == list->head->next) {
list->head = NULL;
list->tail = NULL;
}
else {
list->head = list->head->next;
}
}
else {
NODE_TYPE *temp;
temp = list->head;
while ((NULL != temp) && (temp->next != node)) {
temp = temp->next;
}
if (NULL != temp) {
temp->next = node->next;
}
}
free (node);
}
/* ------------------------------------------- */
void linked_list_print (LINKED_LIST *list)
{
NODE_TYPE *node;
printf ("linked list [ ");
node = list->head;
while (NULL != node) {
printf ("%02d ", node->data);
node = node->next;
}
printf ("]\n");
}
/* ------------------------------------------- */
int linked_list_count_node (LINKED_LIST *list)
{
NODE_TYPE *node;
int i;
i = 0;
node = list->head;
while (NULL != node) {
i++;
node = node->next;
}
return i;
}
/* ------------------------------------------- */
int main ()
{
LINKED_LIST *list;
NODE_TYPE *node;
int i, data1, data2, del_data;
list = malloc (sizeof (LINKED_LIST));
linked_list_init (list);
for (i = 0; i < DATA_SIZE; i++) {
data1 = (int) rand () % 100;
printf ("adding node to head of linked list: ");
printf ("%02d\n", data1);
linked_list_insert_node_h (list, data1);
}
linked_list_print (list);
for (i = 0; i < DATA_SIZE; i++) {
data2 = (int) rand () % 100;
printf ("adding node to tail of linked list: ");
printf ("%02d\n", data2);
linked_list_insert_node_t (list, data2);
}
linked_list_print (list);
del_data = data2;
printf ("finding node: [%d]\n", del_data);
node = linked_list_find_node (list, del_data);
if (NULL != node) {
printf ("deleting node: [%d]\n", del_data);
linked_list_delete_node (list, node);
}
else {
printf ("Node not found: [%d]\n", del_data);
}
linked_list_print (list);
printf ("number of node(s):%d\n", linked_list_count_node (list));
free (list);
return 0;
}
EOF