//苏嵌//韦庆宏//20180724

 

 

 

 

今日学习任务

 

掌握链表的相关知识。

今日任务完成情况

 

了解了有表头、无表头的链表分别是如何编程的,并可以ke'j自己写出

题汇总

 

对链表的编写不熟练。

 

今日未解决问题

 

今日开发收获

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

 

自我评价

 

 

可以用画图理解链表插入、逆序、删除,但是对部分代码还有点问题,可以解决。

其他

 

#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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值