Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- struct node {
- int info;
- struct node *next;
- };
- typedef struct node* Node;
- void list_insert( int n, Node *l);
- void list_print(Node l);
- void list_delete(int n, Node *l);
- int isIn(int n, Node l);
- int list_count(Node l);
- void list_print_rec(Node l);
- void list_destroy(Node l);
- int main (void) {
- Node head;
- char op;
- int n;
- int count = 0;
- while ((op = getchar()) != 'f') {
- /*scanf(" %c", &op);
- if (op == 'f')
- break;
- */
- switch (op) {
- case '+':
- scanf("%d",&n);
- list_insert(n,&head);
- list_print(head);
- printf("\n");
- break;
- case '-':
- scanf("%d",&n);
- list_delete(n, &head);
- list_print(head);
- printf("\n");
- break;
- case '?':
- scanf("%d", &n);
- if (isIn(n, head)) {
- printf("%d appartiene all'insieme\n",n);
- } else
- printf("%d non appartiene all'insieme\n",n);
- break;
- case 'p':
- list_print(head);
- printf("\n");
- break;
- case 'c':
- printf("%d\n",list_count(head));
- break;
- case 'o':
- list_print_rec(head);
- break;
- }
- }
- }
- void list_insert( int n, Node *l){
- Node curr = *l;
- while (curr != NULL) {
- if (curr -> info == n)
- return;
- curr = curr -> next;
- }
- Node new = malloc(sizeof(struct node));
- new -> info = n;
- new -> next = *l;
- *l = new;
- }
- void list_delete( int n, Node *l){
- Node curr, prev;
- for ( curr = *l, prev = NULL; curr != NULL; prev = curr, curr = curr -> next )
- if (curr -> info == n )
- break;
- if (curr == NULL)
- return;
- if (prev == NULL)
- *l = (*l)->next;
- else
- prev -> next = curr -> next;
- free(curr);
- }
- void list_print(Node l) {
- struct node *curr = l;
- while (curr != NULL) {
- printf("%d ", curr -> info);
- curr = curr -> next;
- }
- }
- int isIn(int n, Node l) {
- Node curr = l;
- while (curr != NULL) {
- if (curr -> info == n)
- break;
- curr = curr -> next;
- }
- if (curr == NULL)
- return 0;
- else
- return 1;
- }
- int list_count(Node l) {
- int count = 0;
- Node curr = l;
- while (curr != NULL) {
- count++;
- curr = curr -> next;
- }
- return count;
- }
- void list_print_rec(struct node *l) {
- if (l!= NULL) {
- list_print_rec(l -> next);
- printf("%d ", l -> info);
- }
- }
- void list_destroy(struct node *l) {
- struct node *curr = l;
- struct node *prev = NULL;
- while (curr != NULL){
- prev = curr;
- curr = curr -> next;
- free(prev);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement