苏嵌//许婷婷//2018.7.24

苏嵌                                                                                                                              项目实战

学习日志                                     姓名:许婷婷       日期:7.23

 

 

 

 

今日学习任务

 

掌握链表的相关知识。

今日任务完成情况

 

学习了有表头的和无表头的相关操作并进行了相关的编程练习。

今日开发中出现的问题汇总

 

对链表的编写不熟练。

 

今日未解决问题

 

今日开发收获

了解了建立链表的具体过程,并学会了在头,尾和中间插入链表,增加链表,删除链表以及逆序。

 

自我评价

 

 

可以理解链表是如何插入,增加,删除,但是编写程序不够熟练。

其他

 

#include <stdio.h>

#include <stdlib.h>

 

struct node

{

    int num;

    struct node * next;

};

 

enum RESULT

{

    LINK_ENPTY = -1,

    INSERT_SUCCESS,

    INSERT_FAIL,

    DELETE_SUCCESS,

    DELETE_FAIL,

    RESERVE_SUCCESS,

    RESERVE_FAIL

};

 

typedef struct node Node;

typedef Node * link;

 

void create_link(link *head)

{

    *head = NULL;

}

 

void insert_head_node(link newnode,link *head)

{

    newnode->next = *head;

    *head = newnode;

}

 

int insert_mid_node(link newnode,link *head,int num)

{

    if(*head == NULL)

    {

        return LINK_ENPTY;

    }

 

    link temp = *head;

 

    while(temp != NULL)

    {

        if(temp->num == num)

        {

            newnode->next = temp->next;

            temp->next = newnode;

            return INSERT_SUCCESS;

        }

        temp = temp->next;

    }

    return INSERT_FAIL;

}

void insert_tail_node(link newnode,link *head)

{

    if(*head == NULL)

    {

        newnode->next = NULL;

        *head = newnode;

    }

    else

    {

        link temp = *head;

        while(temp->next != NULL)

        {

            temp = temp->next;

        }

        temp->next = newnode;

    }

}

 

int delete_link(link *head,int num)

{

    if(*head == NULL)

    {

        return DELETE_FAIL;

    }

    link temp = *head;

 

    if((*head)->num == num)

    {

        *head = (*head)->next;

        free(temp);

        temp = NULL;

    }

    else

    {

        while(temp != NULL)

        {

            link p;

            p = temp;

            temp = temp->next;

            if(temp->num == num)

            {

                p->next = temp->next;

                 free(temp);

                 temp = NULL;

                 return DELETE_SUCCESS;

            }

        }

    }

    return DELETE_FAIL;

}

 

int reserve_link(link *head)

{

    if(*head == NULL||(*head)->next == NULL)

    {

        return RESERVE_FAIL;

    }

    link p = *head;

    link s = p->next;

    link t = s->next;

    while(t != NULL)

    {

        s->next = p;

        p = s;

        s = t;

        t = t->next;

    }

    s->next = p;

    (*head)->next = NULL;

    *head = s;

    return RESERVE_SUCCESS;

}

 

void display_link(link head)

{

    link temp = head;

    while(temp != NULL)

    {

        printf("%d\n",temp->num);

        temp = temp->next;

    }

}

 

int main()

{

    int i;

    link head;

    link newnode;

 

    create_link(&head);

 

    for(i = 0;i < 10;i++)

    {

        newnode = (link)malloc(sizeof(Node));

        newnode->num = i + 1;

        insert_tail_node(newnode,&head);

    }

   

    display_link(head);

       

 /*   newnode = (link)malloc(sizeof(Node));

    newnode->num = 6;

    if((insert_mid_node(newnode,&head,5)) == INSERT_SUCCESS)

    {

        display_link(head);

    }

    else

    {

        printf("error!\n");

    }

 

    delete_link(&head,1);

    display_link(head);*/

 

    reserve_link(&head);

    display_link(head);

 

    return 0;

}

 

 

 

 

猜你喜欢

转载自blog.csdn.net/dada12138/article/details/81192279