苏嵌//季宇晨//7.24

 

 

 

 

今日学习任务

 

1、数理掌握链表的所有操作;(单链表、单向循环,双向循环链表)

今日任务完成情况

 

(详细说明本日任务是否按计划完成,开发的代码量)

1、链表:解决数组带来空间利用的问题

  1. 链表分为单链表,单向循环链表,双向链表,双向循环链表,链表还分带表头和不带表头,今天一天主要学习了单链表带表头和不带表头的两种操作
  2. 用单链表实现了插入,中间插入,尾部插入,删除,逆序等操作
  3. 数据结构的作用是:用来管路数据(管理数据的存取,遍历,查找)

 

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

 

 

今日未解决问题

 

今日开发收获

今天主要学习了单链表的一些操作,因为链表分为带表头和不带表头,上午主要是写不代表头的程序,实现各个功能,在此基础上,在写带表头的,相对会轻松一点

 

自我评价

 

(是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等)

 

 

完成了今天的既定任务,今天大部分时间都是在写单链表的程序,对链表有了一定的了解,但是在链表的逻辑理解上还有所欠缺,看程序能看懂,自己写还是困难,还需加强练习

 

其他

 

1、单链表不带表头的操作,实现插入,删除                                                                                     ,逆序等

#include <stdio.h>

#include <stdlib.h>

 

enum RESULT

{

    LINK_EMPTRY,

    INSERT_SUCCESS,

    INSERT_FAIL,

    DELETE_SUCCESS,

    DELETE_FAIL,

    REVERSE_SUCCESS,

    REVERSE_FAIL

};

 

struct node

{

    int num;

 

    struct node *next;

};

 

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;

}

 

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;

                                                newnode->next = NULL;

    }

}

 

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

{

    if(*head == NULL)

    {

        return LINK_EMPTRY;

    }

   

    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;

}

 

int delete_node(Link *head, int num)

{

    if(*head == NULL)

    {

        return LINK_EMPTRY;    

    }

 

    Link temp = *head;

 

    if((temp)->num == num)

    {

        *head = (*head)->next;

                                                                         free(temp);

                                                                     temp = NULL;

                                              return DELETE_SUCCESS;

    }

    else

    {

         Link p = temp;

                                                       temp = temp->next;

 

         while(temp != NULL)

         {

            if(temp->num == num)

                                                                                        {

                p->next = temp->next;

                                                                                                                                                                                 free(temp);

                                                                                                                                                                             temp = NULL;

                                                                                                                                                       return DELETE_SUCCESS;

                                                                                        }

           

                                                                       p = temp;

                                                  temp = temp->next;

                                                                                            }

 

                                                      return DELETE_FAIL;

    }

 

}

 

int reverse_link(Link *head)

{

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

    {

         return REVERSE_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 REVERSE_SUCCESS;

}

 

void display_link(Link head)

{

    Link temp = head;

 

    while(temp != NULL)

    {

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

       temp = temp->next;

    }

 

}

 

int main()

{

    Link head;

    Link newnode;

 

    create_link(&head);

 

    int i;

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

    {

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

                                                  newnode->num = i + 1;

       

                          insert_tail_node(newnode,&head);

                  //insert_head_node(newnode,&head);

    }

 

    display_link(head);

    #if 0

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

    newnode->num = 11;

 

    insert_mid_node(newnode,&head,5);

    #endif

 

    //delete_node(&head,1);

 

    reverse_link(&head);

 

    display_link(head);

 

   

    return 0;

}

2、单链表带表头

#include <stdio.h>

#include <stdlib.h>

 

enum RESULT

{

    LINK_EMPTRY,

    INSERT_SUCCESS,

    INSERT_FAIL,

    DELETE_SUCCESS,

    DELETE_FAIL,

    REVERSE_SUCCESS,

    REVERSE_FAIL

};

 

struct node

{

    int num;

 

    struct node *next;

};

 

typedef struct node Node;

typedef Node * Link;

 

void create_link(Link *head)

{

    //*head = NULL;

    *head = (Link)malloc(sizeof(Node));

    (*head)->next = NULL;

}

 

void insert_head_node(Link newnode, Link *head)

{

    newnode->next = (*head)->next;

    (*head)->next = newnode;

}

 

void insert_tail_node(Link newnode, Link *head)

{

        Link temp = *head;

 

                                          while(temp->next != NULL)

                                                                                             {

                                                  temp = temp->next;

                                                                                             }

 

                                                temp->next = newnode;

                                                newnode->next = NULL;

}

 

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

{

    Link temp = (*head)->next;

   

    while(temp != NULL)

    {

        if(temp->num == num)

                                                                                             {

            newnode->next = temp->next;

                                          temp->next = newnode;

                                         return INSERT_SUCCESS;

                                                                                             }

                                                        temp = temp->next;

    }

 

    return INSERT_FAIL;

}

 

int delete_node(Link *head, int num)

{

 

    Link temp = *head;

 

         Link p = temp;

                                                       temp = temp->next;

 

         while(temp != NULL)

         {

            if(temp->num == num)

                                                                                        {

                p->next = temp->next;

                                                                                                                                                                                 free(temp);

                                                                                                                                                                             temp = NULL;

                                                                                                                                                       return DELETE_SUCCESS;

                                                                                        }

           

                                                                       p = temp;

                                                  temp = temp->next;

                                                                                            }

 

                                                      return DELETE_FAIL;

   

 

}

 

int reverse_link(Link *head)

{

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

    {

         return REVERSE_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->next = NULL;

    (*head)->next = s;

 

    return REVERSE_SUCCESS;

}

 

void display_link(Link head)

{

    Link temp = head->next;

 

    while(temp != NULL)

    {

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

       temp = temp->next;

    }

 

}

 

int main()

{

    Link head;

    Link newnode;

 

    create_link(&head);

 

    int i;

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

    {

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

                                                  newnode->num = i + 1;

       

                          insert_tail_node(newnode,&head);

                  //insert_head_node(newnode,&head);

    }

 

    display_link(head);

    #if 0

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

    newnode->num = 11;

 

    insert_mid_node(newnode,&head,5);

    #endif

 

    //delete_node(&head,1);

 

    reverse_link(&head);

 

    display_link(head);

 

   

    return 0;

}

猜你喜欢

转载自blog.csdn.net/xbackjyc/article/details/81190857