[C语言] C 语言实例 呕心沥血之作 快速提升C能力

[复制链接]
2993|27
 楼主| 一路向北lm 发表于 2018-10-16 23:09 | 显示全部楼层
smartpower 发表于 2018-10-15 09:02
在MCU一般不太用到这么高深的技术。用得最多的就一个FOR。

没这么简单吧
Vansm 发表于 2018-10-17 10:05 | 显示全部楼层
一路向北lm 发表于 2018-10-16 23:08
唉,自己一天练习点,很有用吧

其实现在看来  还是点多做项目   进步最快
 楼主| 一路向北lm 发表于 2018-10-18 13:22 | 显示全部楼层
Vansm 发表于 2018-10-17 10:05
其实现在看来  还是点多做项目   进步最快

是的,项目提高的快。
 楼主| 一路向北lm 发表于 2018-10-18 20:21 | 显示全部楼层
更新了,关于单链表的一些总结:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4. #include<assert.h>


  5. #define  FALSE    0
  6. #define  TRUE     1

  7. // 单链表声明
  8. typedef struct NODE
  9. {
  10.    struct  NODE  *link;
  11.    int     value;
  12. }Node;

  13. // 插入函数 效率不错
  14. int sll_insert(register Node **linkp , int new_value)
  15. {
  16.   register Node *current;
  17.   register Node * news;

  18.         /*寻找正确的插入位置,方法是按顺序访问链表,直到到达值大于或等于新插入值的节点*/
  19.         while((current = *linkp) != NULL && current->value < new_value)
  20.         {
  21.           linkp = ¤t->link;
  22.         }

  23.         /* 为新节点分配内存,并把新值存入到新节点中,如果内存分配失败,函数返回FALSE*/
  24.         news = (Node *) malloc(sizeof(Node));
  25.         if(news == NULL)
  26.            return FALSE;
  27.         news->value =new_value;
  28.         /* 把新节点插入到链表中,并返回TRUE*/
  29.         news->link =current;
  30.         *linkp = news;
  31.         return TRUE;
  32. }

  33. // 在链表中寻找特定的值,返回链表节点指针
  34. Node * sll_find(Node *first,int desired_value)
  35. {
  36.         for(;first!=NULL;first=first->link)
  37.                 if(first->value == desired_value)
  38.                   return first;               
  39.         return NULL;       
  40. }
  41. //打印链表数据
  42. void printSll(Node *root)
  43. {
  44.   while(root!=NULL)
  45.   {
  46.           printf("%d\n",root->value);
  47.           root = root->link;
  48.   }
  49. }

  50. //输出链表节点个数
  51. int sll_count(Node *first)
  52. {
  53.         int count=0;
  54.         for(;first!=NULL;first=first->link)
  55.                  count++;
  56.         return count;                               
  57. }
  58. // 反序排列一个单链表所有节点,返回指向单链表的新头节点指针
  59. Node * sll_reverse(Node *current)
  60. {
  61.      Node *previous;
  62.          Node *next;

  63.          for(previous = NULL;current != NULL; current =next)
  64.          {
  65.                  next = current->link;
  66.                  current->link = previous;
  67.                  previous = current;
  68.          }
  69.          return previous;
  70. }

  71. // 功能:单链表中删除指定节点。
  72. // 参数:第一个参数指向链表的根指针,第二个参数指向需要被删除的节点。
  73. // 返回:成功返回TRUE,否则FALSE。
  74. int sll_remove(Node **linkp,Node *del)
  75. {
  76.         register Node *current;
  77.         assert(del!=NULL);

  78.         // 寻求要删除的节点
  79.         while((current = *linkp) != NULL && current != del)
  80.             linkp = ¤t->link;
  81.         if(current == del)
  82.         {
  83.                 *linkp = current->link;
  84.                 free(current);
  85.                 return TRUE;
  86.         }
  87.         else
  88.                 return FALSE;
  89. }


yangzhi1023 发表于 2018-10-25 14:58 | 显示全部楼层
楼主,能尽快总结打包吗??等待中。。。
 楼主| 一路向北lm 发表于 2018-10-26 21:18 | 显示全部楼层
yangzhi1023 发表于 2018-10-25 14:58
楼主,能尽快总结打包吗??等待中。。。

写完了一起打包吧,这点太少了
 楼主| 一路向北lm 发表于 2018-10-26 21:18 | 显示全部楼层
可以吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部