July 24 exercise and some homework about linked list

Head insertion

#include <stdio.h>
#include <stdlib.h>

struct node
{
    int num;
    struct node * next;
};

typedef struct node Node;
typedef struct node* Link;

void create_link(Link *head) //Create an empty linked list
{
    *head = NULL;
}

void create_node(Link * new_node) //Allocate memory space
{
    *new_node = (Link)malloc(sizeof(Node));

    if(*new_node == NULL)
    {
        printf("malloc error!\n");
        exit(-1);
    }
}

void display_link(Link head) //output
{
    Link p;

    p = head;

    if(head == NULL)
    {
        printf("link is empty!\n");
        return;
    }

    while(p != NULL)
    {
        printf("%d\n",p -> num);
        p = p -> next;
    }
}

void insert_node_head(Link *head,Link new_node) //Head insertion
{
    new_node -> next = *head;
    *head = new_node;
}

void release_link(Link *head)
{
    Link p;

    p = *head;

    while((*head) != NULL)
    {
        *head = (*head) -> next;
        free(p);
        p = *head;
    }
}

int main()
{
    Link head = NULL;
    Link new_node = NULL;
    int i;

    create_link(&head); //Create an empty linked list

    for(i = 0;i < 10;i++)
    {
        create_node(&new_node); //Allocate memory space

        new_node -> num = i + 1;

        insert_node_head(&head,new_node); //Head insertion
    }

    display_link(head); //output

    release_link(&head); //release

    display_link(head);

    return 0;
}

Tail insertion

#include <stdio.h>
#include <stdlib.h>

struct node
{
    int num;
    struct node * next;
};

typedef struct node Node;
typedef struct node* Link;

void create_link(Link *head) //Create an empty linked list
{
    *head = NULL;
}

void create_node(Link *new_node) //Allocate memory space
{
    *new_node = (Link)malloc(sizeof(Node));

    if(*new_node == NULL)
    {
        printf("malloc error!\n");
        exit(-1);
    }
}

void insert_node_tail(Link *head,Link new_node) //Tail insertion
{
    Link p;

    p = *head;

    if((*head) == NULL)
    {
        *head = new_node;
        new_node -> next = NULL;
    }
    else
    {
        while(p -> next != NULL)
        {
            p = p -> next;
        }

        p -> next = new_node;
        new_node -> next = NULL;
    }
}

void display_link(Link head)
{
    Link p;

    p = head;

    if(head == NULL)
    {
        printf("link is empity!\n");
        return;
    }

    while(p != NULL)
    {
        printf("%d\n",p -> num);
        p = p -> next;
    }

}

void release_link(Link *head)
{
    Link p;

    p = *head;

    while((*head) != NULL)
    {
        *head = (*head) -> next;
        free(p);
        p = *head;
    }
}

int main()
{
    Link head = NULL;
    Link new_node = NULL;
    int i;

    create_link(&head); //Create linked list

    for(i = 0;i < 10;i++)
    {
        create_node(&new_node); //Allocate memory space

        new_node -> num = i + 1;

        insert_node_tail(&head,new_node); //Tail insertion
    }

    display_link(head); //output

    release_link(&head); //release

    display_link(head);

    return 0;
}

Middle insertion (front insertion and back insertion)

#include <stdio.h>
#include <stdlib.h>

struct node
{
    int num;
    struct node * next;
};

typedef struct node Node;
typedef struct node* Link;

void create_link(Link *head) //Create an empty linked list
{
    *head = NULL;
}

void create_node(Link *new_node) //Allocate memory space
{
    *new_node = (Link)malloc(sizeof(Node));

    if(*new_node == NULL)
    {
        printf("malloc error!\n");
        exit(-1);
    }
}

void insert_node_tail(Link *head,Link new_node) //Tail insertion
{
    Link p;

    p = *head;

    if((*head) == NULL)
    {
        *head = new_node;
        new_node -> next = NULL;
    }
    else
    {
        while(p -> next != NULL)
        {
            p = p -> next;
        }

        p -> next = new_node;
        new_node -> next = NULL;
    }
}

void display_link(Link head) //output
{
    Link p;

    p = head;

    if(head == NULL)
    {
        printf("link is empity!\n");
        return;
    }

    while(p != NULL)
    {
        printf("%d\n",p -> num);
        p = p -> next;
    }
}

void release_link(Link *head) //release
{
    Link p;

    p = *head;

    while((*head) != NULL)
    {
        *head = (*head) -> next;
        free(p);
        p = *head;
    }
}

void insert_node_midf(Link *head,Link new_node,int loc) //Middle insert front insert
{
    Link p,q;

    p = q = *head;

    if((*head) -> num == loc)
    {
        new_node -> next = *head;
        *head = new_node;
    }
    else
    {
        while(p != NULL && p -> num != loc)
        {
            q = p;
            p = p -> next;
        }

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

void insert_node_midl(Link *head,Link new_node,int loc) // Insert middle and insert back
{
    Link p,q;

    p = q = *head;
    
    if((*head) -> num == loc)
    {
        p = p -> next;
        (*head) -> next = new_node;
        new_node -> next = p;
    }
    else
    {
        while(p != NULL && q -> num != loc)
        {
            q = p;
            p = p -> next;
        }

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

int main()
{
    Link head = NULL;
    Link new_node = NULL;
    int i;

    create_link(&head); //Create linked list

    for(i = 0;i < 10;i++)
    {
        create_node(&new_node); //Allocate memory space

        new_node -> num = i + 1;

        insert_node_tail(&head,new_node); //Tail insertion
    }

    display_link(head); //output

    printf("Enter a new node:\n");
    create_node(&new_node);
    scanf("%d",&new_node -> num);

    int loc;

    printf("Enter where to insert:\n");
    scanf("%d",&loc);

  //  Insert ﹐ node ﹐ MIDF (& head, new ﹐ node, LOC); / / insert before inserting
    insert_node_midl(&head,new_node,loc); //Insert middle and insert back

    display_link(head);

    release_link(&head); //release

    display_link(head);

    return 0;
}

Delete Vertex

#include <stdio.h>
#include <stdlib.h>

struct node
{
    int num;
    struct node * next;
};

typedef struct node Node;
typedef struct node* Link;

void create_link(Link *head) //Create an empty linked list
{
    *head = NULL;
}

void create_node(Link *new_node) //Allocate memory space 
{
    *new_node = (Link)malloc(sizeof(Node));

    if(*new_node == NULL)
    {
        printf("malloc error!\n");
        exit(-1);
    }
}

void insert_node_tail(Link *head,Link new_node) //Tail insertion
{
    Link p;

    p = *head;

    if((*head) == NULL)
    {
        *head = new_node;
        new_node -> next = NULL;
    }
    else
    {
        while(p -> next != NULL)
        {
            p = p -> next;
        }

        p -> next = new_node;
        new_node -> next = NULL;
    }
}

void display_link(Link head) //output
{
    Link p;

    p = head;

    if(head == NULL)
    {
        printf("link is empity!\n");
        return;
    }

    while(p != NULL)
    {
        printf("%d\n",p -> num);
        p = p -> next;
    }
}

void release_link(Link *head)
{
    Link p;

    p = *head;

    while((*head) != NULL)
    {
        *head = (*head) -> next;
        free(p);
        p = *head;
    }
}

void delete_link(Link *head,int temp) //Delete Vertex
{
    Link p,q;

    p = q = *head;

    if((*head) -> num == temp)
    {
        *head = (*head) -> next;
        free(p);
        p = q = *head;
    }
    else
    {
        while(p != NULL && p -> num != temp)
        {
            q = p;
            p = p -> next;
        }
        if (p)          //Judge whether p is true
        {
            q -> next = p -> next;
            free(p);
        }
        else            //When p is out of node range
        {
            printf("The node to be deleted is out of range!\n");
        }
        
    }
}

int main()
{
    Link head = NULL;
    Link new_node = NULL;
    int i;

    create_link(&head); //Create linked list

    for(i = 0;i < 10;i++)
    {
        create_node(&new_node); //Allocate memory space

        new_node -> num = i + 1;

        insert_node_tail(&head,new_node); //Tail insertion
    }

    display_link(head); //output

    int temp;

    printf("Enter the node location to delete:\n");
    scanf("%d",&temp);

    delete_link(&head,temp); //Delete specified node

    display_link(head);

    release_link(&head); //release

    display_link(head);

    return 0;
}

task
11: enter a string. No matter whether there are duplicate letters, only print the lowercase letters that have appeared, and print them in lowercase alphabetical order.
(for example, enter qewqwr322rqw < > 211qesfsserazz, and print aeqrwz)

#include <stdio.h>
#define N 100

int main()
{
    char a[N] = {0};
    char b[N] = {0};

    printf("Input string:\n");
    scanf("%s",a);

    int i;
    int temp = 0;

    for(i = 0;i < *(a + i);i++)
    {
        temp = *(a + i) - 97;
        *(b + temp + 97) = '+';
    }

    for(i = 97;i < 97 + 26;i++)
    {
        if(*(b + i) == '+')
        {
            printf("%c",i);
        }
    }

    printf("\n");

    return 0;
}

12: enter the nth week of a month and the M day of the week. Use the int *GetDay() function to get parameters and return results to get the day of the month.
(if input: 3, 4, i.e. the 4th day of the 3rd week of the month, i.e. the 18th day of the month)

#include <stdio.h>

int *Getday(int week,int day)
{
    int *D = NULL;

    int x = (week - 1) * 7 + day;

    D = &x;

    return D;
}

int main()
{
    int *D = NULL;
    int week,day;

    printf("Enter week and day of week:\n");
    scanf("%d%d",&week,&day);

    D = Getday(week,day);

    printf("%d\n",*D);

    return 0;
}

13: (1) to establish a sequence table, it is required to input 10 integers from the keyboard and display the elements of the sequence table from the screen.
(2) use the function to find one of the elements in the sequence table. If found, return the position of the element in the sequence table and the value of the element. Otherwise, it will prompt that there is no such element.
(3) insert and delete the sequence table with function. The user inputs the elements to be inserted and the insertion position, which will complete the output of the inserted sequence table; the user inputs to delete the first few elements, which will complete the output of the deleted sequence table.

#include <stdio.h>
#include <stdlib.h>

struct node
{
    int num;
    struct node * next;
};

typedef struct node Node;
typedef struct node* Link;

void create_link(Link *head) //Create an empty linked list
{
    *head = NULL;
}

void create_node(Link *new_node) //Allocate memory space
{
    *new_node = (Link)malloc(sizeof(Node));

    if(*new_node == NULL)
    {
        printf("malloc error!\n");
        exit(-1);
    }
}

void insert_node_tail(Link *head,Link new_node) //Tail insertion
{
    Link p;
    
    p = *head;

    if((*head) == NULL)
    {
        *head = new_node;
        new_node -> next = NULL;
    }
    else
    {
        while(p -> next != NULL)
        {
            p = p -> next;
        }

        p -> next = new_node;
        new_node -> next = NULL;
    }
}

void display_link(Link head) //output
{
    Link p;

    p = head;

    if(head == NULL)
    {
        printf("link is empty!\n");
    }

    while(p != NULL)
    {
        printf("%d\n",p -> num);
        p = p -> next;
    }
}

void release_link(Link *head) //release
{
    Link p;

    p = *head;

    while((*head) != NULL)
    {
        *head = (*head) -> next;
        free(p);
        p = *head;
    }
}

void search_link(Link *head,int n) //lookup
{
    Link p;
    int count = 1;

    p = *head;

    if(*head == NULL)
    {
        printf("link is empty!\n");
    }

    while(p != NULL && p -> num != n)
    {
        count++;
        p = p -> next;
    }

    if(p)
    {
        printf("find it!No.%d\n",count);
    }
    else
    {
        printf("can not find!\n");
    }
}

void insert_node_midf(Link *head,Link new_node,int loc) //Middle insert front insert
{
    Link p,q;
    p = q = *head;

    if((*head) -> num == loc)
    {
        new_node -> next = *head;
        *head = new_node;
    }
    else
    {
        while(p != NULL && p -> num != loc)
        {
            q = p;
            p = p -> next;
        }

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

void delete_link(Link *head,int temp) //Delete Vertex
{
    Link p,q;

    p = q = *head;

    if((*head) -> num == temp)
    {
        *head = (*head) -> next;
        free(p);
        p = q = *head;
    }
    else
    {
        while(p != NULL && p -> num != temp)
        {
            q = p;
            p = p -> next;
        }

        if(p)
        {
            q -> next = p -> next;
            free(p);
        }
        else
        {
            printf("Cannot find number to delete!\n");
        }
    }
}

int main()
{
    Link head = NULL;
    Link new_node = NULL;
    int i;
    int a[10];

    printf("Enter number:\n");
    
    for(i = 0;i < 10;i++)
    {
        printf("a[%d]=",i);
        scanf("%d",&a[i]);
    }

    create_link(&head); //Create linked list

    for(i = 0;i < 10;i++)
    {
        create_node(&new_node); //Allocate memory space

        new_node -> num =a[i];

        insert_node_tail(&head,new_node); //Tail insertion
    }

    display_link(head); //output

    int n;

    printf("Enter a number:\n");
    scanf("%d",&n);

    search_link(&head,n); //lookup

    int loc;

    printf("Enter insertion location:\n");
    scanf("%d",&loc);

    printf("Enter the value of the inserted element:\n");
    create_node(&new_node);
    scanf("%d",&new_node -> num);

    insert_node_midf(&head,new_node,loc); //Middle insert front insert

    display_link(head);

    int temp;

    printf("Enter the node value to delete:\n");
    scanf("%d",&temp);

    delete_link(&head,temp); //Delete Vertex

    display_link(head);

    release_link(&head); //release

    display_link(head);

    return 0;
}

Posted by mrprozac on Wed, 16 Oct 2019 09:31:32 -0700