/* * Sample C code with linked list. */ #include #include #define ADD_EMPLOYEE 1 #define REMOVE_EMPLOYEE 2 #define FIND_EMPLOYEE_NAME 3 #define FIND_EMPLOYEE_AGE 4 #define LIST_ALL_EMPLOYEES 5 struct e_node { char name[50]; int age; struct e_node *next; }; typedef struct e_node node; node *head; void insert_to_list(int e_age, char *e_name) { node *new_employee; new_employee->age = e_age; strcpy(new_employee->name,e_name); new_employee->next = NULL; //add the node to the front if (head != NULL) { new_employee->next = head; } head = new_employee; } void print_employee_info() { node *cur = head; while(cur != NULL) { printf("Employee Name : %s, Age : %d \n",cur->name, cur->age); cur = cur->next; } } void cleanup() { node *cur = head; node *pre; while(cur != NULL) { pre = cur; cur = cur->next; free(pre); } } void add_employee_info() { char employee_name[50]; int employee_age; printf("\n Enter employee age : "); scanf("%d", &employee_age); printf("\n Enter employee name : "); scanf("%s", &employee_name); //put it into linked list insert_to_list(employee_age, employee_name); } int remove_employee_info() { char e_name[50]; printf("\n Employee name : "); scanf("%s",e_name); node *cur = head; node *prev = NULL; while (cur != NULL) { if (!strcmp(cur->name,e_name)) { printf("Found employee record...deleting...\n"); if (cur == head) { head = cur->next; } else { prev->next = cur->next; } free(cur); return 1; }else { prev = cur; cur = cur->next; } } return 0; } int main(int argc, char *argv[]) { int operation_code; head = NULL; while (1) { printf("\n Specify Operation (Insert(1), Delete(2), List(5)) : "); scanf("%d", &operation_code); if (operation_code == ADD_EMPLOYEE) add_employee_info(); else if (operation_code == REMOVE_EMPLOYEE) { if (!remove_employee_info()) printf("Cant find employee record\n"); } else if (operation_code == LIST_ALL_EMPLOYEES) print_employee_info(); else break; } cleanup(); return 0; }