Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h> /*malloc and atoi*/
- #include <string.h> /*strtok*/
- #define SIZE 100
- typedef struct members {
- int id;
- int cost;
- int seniority;
- struct members *next;
- struct members *prev;
- } members;
- members *make_list(members **);
- void print_list(members **);
- void delete_from_list(members **, int);
- void free_list(members **);
- int main()
- {
- members *h;
- make_list(&h);
- print_list(&h);
- delete_from_list(&h, 2);
- printf("after delete\n");
- print_list(&h);
- free_list(&h);
- printf("after free\n");
- print_list(&h);
- return 0;
- }
- members *make_list(members **head)
- {
- int isHead = 1;
- char buf[SIZE];
- char *p;
- members *tmp;
- while(!feof(stdin))
- {
- /*allocate space*/
- printf("please input line, paramets delimited by commas\n");
- tmp = (members *)malloc(sizeof(members));
- if(tmp == NULL)
- {
- printf("Can't allocate memory\n");
- exit(1);
- }
- if (fgets(buf, SIZE, stdin) == NULL)
- {
- printf("Reached EOF\n");
- if(isHead == 1)
- exit(1);
- else
- return (*head);
- }
- /*put data*/
- p = strtok(buf, ",");
- tmp->id = atoi(p);
- p = strtok(NULL, ",");
- tmp->cost = atoi(p);
- p = strtok(NULL, ",");
- tmp->seniority = atoi(p);
- /*arrange pointers*/
- if(isHead == 1)
- {
- *head = tmp;
- (*head)->prev = NULL;
- (*head)->next = NULL;
- isHead = 0;
- /*printf("my id is %d\n", (*head)->id);*/
- }
- else
- {
- tmp->next = *head;
- tmp->prev = NULL;
- (*head)->prev = tmp;
- (*head) = tmp;
- /*printf("my data is %d %d %d\n", tmp->id, tmp->cost, tmp->seniority);*/
- }
- }
- return (*head);
- }
- void print_list(members **head)
- {
- members *curr = *head;
- while(curr)
- {
- printf("my data is %d %d %d\n", curr->id, curr->cost, curr->seniority);
- curr = curr->next;
- }
- }
- void delete_from_list(members **head, int artist_num)
- {
- members *curr = *head;
- members *temp;
- int artist = 0;
- while(curr)
- {
- if(curr->id == artist_num)
- {
- temp = curr;
- if(curr->next !=NULL)
- curr->prev->next = curr->next;
- if(curr->prev !=NULL)
- curr->next->prev = curr->prev;
- if(curr->prev == NULL)
- curr->next->prev = NULL;
- if(curr->next == NULL)
- curr->prev->next = NULL;
- free(temp);
- artist = 1;
- }
- curr = curr->next;
- }
- if(artist == 0)
- {
- printf("artist wasn't found\n");
- }
- }
- void free_list(members **head)
- {
- members *curr = *head;
- members *next;
- while(curr)
- {
- next = curr->next;
- free(curr);
- curr = next;
- }
- *head = NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement