当前位置:   article > 正文

数据结构-C语言链表模拟_p=(node)malloc(sizeof(node))

p=(node)malloc(sizeof(node))
  1. # include <stdio.h>
  2. # include <malloc.h>
  3. # include <stdlib.h>
  4. //线性链表模拟
  5. /*
  6. 只是单纯的模拟练习一下,没有检查健壮性,这可能是一个漏洞百出的程序。
  7. */
  8. typedef struct Node
  9. {
  10.     int data;
  11.     struct Node * pNode;
  12. }NODE,* PNODE;
  13. PNODE create_list(int/*链表的长度,链表的值默认为0*/);//创建一个链表
  14. void show_list(PNODE/*链表头指针地址*/);//遍历一个链表并打印输出
  15. bool is_empty(PNODE/*链表头指针地址*/);//判断链表是否为空
  16. bool insert_val(PNODE/*链表头指针地址*/,int/*值*/);//给链表赋值
  17. int len_list(PNODE/*链表头指针地址*/);//判断链表的长度
  18. bool del_val(PNODE/*链表头指针地址*/,int/*要删除的值*/,int * /*将删除的值返回给此地址指向的变量*/);//删除某一个值
  19. void sort_list(PNODE/*链表头指针地址*/);//链表排序
  20. void sort_list2(PNODE/*链表头指针地址*/);//链表排序2
  21. bool expand_list(PNODE/*链表头指针地址*/,int/*索引位置*/,int/*要插入的值*/);//在链表的指定位置扩充一个链表元素。
  22. int get_val(PNODE/*链表头指针地址*/,int/*索引位置*/);//获取特定索引位置的链表的值。
  23. int main(void)//测试链表
  24. {
  25.     int pval = NULL;
  26.     PNODE p = create_list(6);
  27.     insert_val(p,35);
  28.     insert_val(p,22);
  29.     insert_val(p,67);
  30.     insert_val(p,89);
  31.     insert_val(p,65);
  32.     insert_val(p,90);
  33.     expand_list(p,6,11);
  34.     //sort_list2(p);
  35.     show_list(p);
  36.     printf("长度:%d\n",len_list(p));
  37.     printf("%d\n",get_val(p,2));
  38.     return 0;
  39. }
  40. PNODE create_list(int len)//创建一个链表
  41. {
  42.     PNODE pn = NULL;
  43.     PNODE pt = NULL;
  44.     int i;
  45.     pn = (PNODE)malloc(sizeof(NODE));
  46.     pt = pn;
  47.     for(i=0;i<len;i++)
  48.     {
  49.         pt->pNode = (PNODE)malloc(sizeof(NODE));
  50.         pt = pt->pNode;
  51.         pt->data = NULL;
  52.         pt->pNode = NULL;
  53.         
  54.     }
  55.     
  56.     return pn;
  57. }
  58. void show_list(PNODE Pnode)//遍历一个链表并打印输出
  59. {
  60.     PNODE t;
  61.     t = Pnode->pNode;
  62.     while(NULL != t)
  63.     {
  64.         printf("%d\n",t->data);
  65.         t = t->pNode;
  66.     }
  67. }
  68. bool is_empty(PNODE pn)//判断链表是否为空
  69. {
  70.     if(NULL == pn || NULL == pn->pNode) return true;
  71.     return false;
  72. }
  73. int len_list(PNODE pn)//判断链表的长度
  74. {
  75.     int cnt=0;
  76.     pn = pn->pNode;
  77.     while(NULL!=pn)
  78.     {
  79.         cnt++;
  80.         pn = pn->pNode;
  81.     }
  82.     return cnt;
  83. }
  84. bool insert_val(PNODE pn,int val)//给链表赋值
  85. {
  86.     int len = len_list(pn);
  87.     pn = pn->pNode;
  88.     if(pn->data==NULL)
  89.     {
  90.         pn->data = val;
  91.         return true;
  92.     }
  93.     else
  94.     {
  95.         int i = 0;
  96.         while(NULL != pn->data && NULL != pn->pNode)
  97.         {
  98.             i++;
  99.             
  100.             pn = pn->pNode;
  101.         }
  102.         if(NULL == pn->data)
  103.         {
  104.             pn->data = val;
  105.             return true;
  106.         }
  107.     }
  108.     return false;
  109. }
  110. bool del_val(PNODE pn,int val,int * pdel_val)//删除某一个值
  111. {
  112.     PNODE pt = pn;
  113.     pn = pn->pNode;
  114.     while(NULL!=pn->data&&NULL!=pn->pNode)
  115.     {
  116.         if(pn->data==val)
  117.         {
  118.             *pdel_val = pn->data;
  119.             break;
  120.         }
  121.         pt = pn;
  122.         pn = pn->pNode;
  123.     }
  124.     if(pn->pNode==NULL&& *pdel_val == NULL) return false;
  125.     pt->pNode = pn->pNode;
  126.     free(pn);
  127.     return true;
  128. }
  129. void sort_list(PNODE pn)//链表排序
  130. {
  131.     int temp;
  132.     PNODE pt = NULL;
  133.     pn = pn->pNode;
  134.     pt = pn->pNode;
  135.     while(pn->pNode!=NULL&&pn->pNode->pNode!=NULL)
  136.     {
  137.         pt = pn->pNode;
  138.         while(pt->pNode!=NULL)
  139.         {
  140.             if(pn->data>pt->data)
  141.             {
  142.                 temp = pn->data;
  143.                 pn->data = pt->data;
  144.                 pt->data = temp;
  145.             }
  146.             pt = pt->pNode;
  147.         }
  148.         pn = pn->pNode;
  149.     }
  150. }
  151. void sort_list2(PNODE pn)//链表排序2
  152. {
  153.     PNODE p1 = NULL,p2=NULL;
  154.     int pt;
  155.     for(p1 = pn->pNode;p1->pNode!=NULL;p1=p1->pNode)
  156.     {
  157.         for(p2=p1->pNode;p2->pNode!=NULL&&p2!=NULL;p2=p2->pNode)
  158.         {
  159.             if(p1->data>p2->data)
  160.             {
  161.                 pt=p1->data;
  162.                 p1->data=p2->data;
  163.                 p2->data=pt;
  164.             }
  165.         }
  166.     }
  167. }
  168. bool expand_list(PNODE pn,int index,int val)//在链表的指定位置扩充一个链表元素。
  169. {
  170.     int i = 1;
  171.     PNODE p1 = pn;
  172.     
  173.     if(index>0&&index<=len_list(pn))
  174.     {    
  175.         for(p1 = pn->pNode;i<index&&p1!=NULL;p1=p1->pNode,pn=pn->pNode) i++;
  176.         pn->pNode = (PNODE)malloc(sizeof(NODE));
  177.         pn->pNode->data = val;
  178.         pn->pNode->pNode = p1;
  179.         return true;
  180.     }
  181.     return false;
  182.     
  183. }
  184. int get_val(PNODE pn,int index)//获取特定索引位置的链表的值。
  185. {
  186.     int i = 1;
  187.     PNODE p1 = pn;
  188.     if(index>0&&index<=len_list(pn))
  189.     {    
  190.         for(p1 = pn->pNode;i<index&&p1!=NULL;p1=p1->pNode,pn=pn->pNode) i++;
  191.         return p1->data;
  192.     }
  193.     printf("没有找到指定的值。\n");
  194.     return 0;
  195. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/902699
推荐阅读
相关标签
  

闽ICP备14008679号