C语言链表完整操作演示分享!

本文实例为大家分享了C链表操作演示的具体代码,供大家参考,具体内容如下

头文件:link_0505.h

  /*   链表演示   */   #ifndef __LINK_0505   #define __LINK_0505   typedef struct node{     int num;     struct node* p_next;   }node;   typedef struct    {     node head,tail;   }link;   //链表的初始化函数   void link_init(link *);   //链表的清理函数   void link_deinit(link *);   //判断链表是否空的函数   int link_empty(link *);   //判断链表是否满的函数   int link_full(link *);   //统计有效数字个数的函数   int link_size(link *);   //在最前边插入数字的函数   int link_add_head(link *, int );   //在最后边插入新的数字的函数   int link_append(link *, int );   //把数字按照顺序插入到链表的函数   int link_insert(link *, int);   //删除最前面数字的函数   int link_remove_head(link *);   //删除最后一个有效数字   int link_remove_tail(link *);   //删除某个给定数字的函数   int link_remove(link *, int );   //获得第一个有效数字的函数   int link_get_head(link *, int *);   //获得最后一个有效数字的函数   int link_get_tail(link *, int *);   //获得指定编号数字的函数   int link_get(link *, int *, int );      #endif   

实现代码: link_0505.cpp

  /*   链表演示   */   #include "stdlib.h"   #include "link_0505.h"   //链表的初始化函数   void link_init(link *p_link)   {     p_link->head.p_next = &(p_link->tail);   }   //链表的清理函数   void link_deinit(link *p_link)   {     while(p_link->head.p_next != &(p_link->tail))     {       node *p_first = &(p_link->head);       node *p_mid = p_first->p_next;       node *p_last = p_mid->p_next;       p_first->p_next = p_last;       free(p_mid);       p_mid = NULL;     }   }   //判断链表是否空的函数   int link_empty(link *p_link)   {     return p_link->head.p_next == &(p_link->tail);   }   //判断链表是否满的函数   int link_full(link *p_link)   {     return 0;   }   //统计有效数字个数的函数   int link_size(link *p_link)   {     int cnt = 0;     node *p_node = NULL;     for (p_node = &(p_link->head);p_node != &(p_link->tail);p_node = p_node->p_next)     {       node *p_first = p_node;       node *p_mid = p_first->p_next;       node *p_last = p_mid->p_next;       if (p_mid != &(p_link->tail))       {         cnt++;       }     }     return cnt;   }   //在最前边插入数字的函数   int link_add_head(link *p_link, int num)   {     node *p_temp = (node *)malloc(sizeof(node));     if (!p_temp)     {       return 0;     }          p_temp->num = num;     node *p_first = &(p_link->head);     node *p_mid = p_first->p_next;     node *p_last = p_mid->p_next;     p_first->p_next = p_temp;     p_temp->p_next = p_mid;        return 1;   }   //在最后边插入新的数字的函数   int link_append(link *p_link, int num)   {     node *p_tmp = (node *)malloc(sizeof(node));     node *p_node = NULL;     if (!p_tmp)     {       return 0;     }     p_tmp->num = num;     for (p_node = &(p_link->head);p_node != &(p_link->tail);p_node = p_node->p_next)     {       node *p_first = p_node;       node *p_mid = p_first->p_next;       node *p_last = p_mid->p_next;       if (p_mid == &(p_link->tail))       {         p_first->p_next = p_tmp;         p_tmp->p_next = p_mid;         break;       }     }     return 1;   }   //把数字按照顺序插入到链表的函数   int link_insert(link *p_link, int num)   {     node* p_temp = (node *)malloc(sizeof(node));     node* p_node = NULL;     if (!p_temp)     {       return 0;     }     p_temp->num = num;     p_temp->p_next = NULL;     for (p_node = &(p_link->head);p_node != &(p_link->tail);p_node = p_node->p_next)     {       node *p_first = p_node;       node *p_mid = p_first->p_next;       node *p_last = p_mid->p_next;       if (p_mid == &(p_link->tail) || p_mid->num > p_temp->num)       {         p_first->p_next = p_temp;         p_temp->p_next = p_mid;         break;       }     }     return 0;   }   //删除最前面数字的函数   int link_remove_head(link *p_link)   {     node *p_first = &(p_link->head);     node *p_mid = p_first->p_next;     node *p_last = p_mid->p_next;     if (p_link->head.p_next == &(p_link->tail))     {       return 0;     }     p_first->p_next = p_last;     free(p_mid);     p_mid = NULL;   }   //删除最后一个有效数字   int link_remove_tail(link *p_link)   {     node *p_node = NULL;     for (p_node = &(p_link->head);p_node !=&(p_link->tail);p_node = p_node->p_next)     {       node *p_first = p_node;       node *p_mid = p_first->p_next;       node *p_last = p_mid->p_next;       if (p_last == &(p_link->tail))       {         p_first->p_next = p_last;         free(p_mid);         p_mid = NULL;         return 1;       }     }     return 0;   }   //删除某个给定数字的函数   int link_remove(link *p_link, int num)   {     node *p_node = NULL;     for (p_node = &(p_link->head);p_node != &(p_link->tail);p_node = p_node->p_next)     {       node *p_first = p_node;       node *p_mid = p_first->p_next;       node *p_last = p_mid->p_next;       if (p_mid != &(p_link->tail) && p_mid->num == num)       {         p_first->p_next = p_last;         free(p_mid);         p_mid = NULL;         return 1;       }     }     return 0;   }   //获得第一个有效数字的函数   int link_get_head(link *p_link, int *p_num)   {     if (p_link->head.p_next == &(p_link->tail))     {       return 0;     }     node *p_first = &(p_link->head);     node *p_mid = p_first->p_next;     node *p_last = p_mid->p_next;     p_first->p_next = p_last;     *p_num = p_mid->num;     return 1;   }   //获得最后一个有效数字的函数   int link_get_tail(link *p_link, int *p_num)   {     node *p_node = NULL;     for (p_node = &(p_link->head);p_node != &(p_link->tail);p_node = p_node->p_next)     {       node *p_first = p_node;       node *p_mid = p_first->p_next;       node *p_last = p_mid->p_next;       if (p_last == &(p_link->tail))       {         *p_num = p_mid->num;         return 1;       }     }     return 0;   }   //获得指定编号数字的函数   int link_get(link *p_link, int *p_num, int num)   {     int cnt = 0;     node *p_node = NULL;     for (p_node = &(p_link->head);p_node != &(p_link->tail);p_node = p_node->p_next)     {       node *p_first = p_node;       node *p_mid = p_first->p_next;       node *p_last = p_mid->p_next;       if (p_mid != &(p_link->tail) && cnt == num)       {         *p_num = p_mid->num;         return 1;       }       cnt++;     }     return 0;   }   

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/482338.html

(0)
上一篇 2020年11月9日
下一篇 2020年11月9日

精彩推荐