在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<abbr id="27omo"></abbr>

<menu id="27omo"><dl id="27omo"></dl></menu>
    • <label id="27omo"><tt id="27omo"></tt></label>

      新聞中心

      EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單向鏈表基本操作的遞歸實(shí)現(xiàn)

      單向鏈表基本操作的遞歸實(shí)現(xiàn)

      作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏

      /*最大值*/
      int max_list(List *head)
      {
      int max = 0;
      int temp;
      if(NULL == head)
      {
      printf("Error: NULL pointer...");
      }

      本文引用地址:http://www.biyoush.com/article/201612/324524.htm

      if(NULL != head && head->next == NULL)
      {
      return head->val;
      }

      else
      {
      temp = max_list(head->next);

      max = (head->val > temp ? head->val : temp);

      return max;
      }
      }

      /*最小值*/
      int min_list(List *head)
      {
      int min = 0;
      int temp;

      if(NULL == head)
      {
      printf("Error: NULL pointer...");
      }

      if(NULL != head && head->next == NULL)
      {
      returnhead->val;
      }

      else
      {
      temp = min_list(head->next);

      min = (head->val < temp ? head->val : temp);

      return min;
      }
      }

      /*創(chuàng)建鏈表*/
      List* create_list(int val)
      {
      List *head = (List *)malloc(sizeof(List)/sizeof(char));

      if(NULL == head)
      {
      return NULL;
      }

      head->val = val;

      head->next= NULL;

      return head;
      }

      /*插入節(jié)點(diǎn)*/
      List* insert_listnode(List *head, int val)
      {
      List *temp;
      if(NULL == head)
      {
      return NULL;
      }

      temp = (List *)malloc(sizeof(List)/sizeof(char));
      temp->val = val;
      temp->next = head;
      head = temp;

      returnhead;
      }

      /*刪除鏈表*/
      void delete_list(List *head)
      {
      List *temp = NULL;
      if(head != NULL)
      {
      temp = head;
      head = head->next;
      free(temp);
      temp = NULL;

      delete_list(head);
      }
      }

      int main()
      {
      int n = 0;
      int i = 0;
      List *head= create_list(10);

      for(i = 0; i < 10; ++ i)
      {
      n = 1 + (int)(10.0*rand()/(RAND_MAX + 1.0));

      head = insert_listnode(head, n);
      }

      fdprint_listnode(head);

      printf("");

      bkprint_listnode(head);

      printf("%d", count_listnode(head));

      printf("");
      #if 10
      head = delete_node(head, 10);
      fdprint_listnode(head);
      printf("");

      bkprint_listnode(head);
      printf("");
      #endif

      #if 10
      head = delete_allnode(head, 10);
      fdprint_listnode(head);

      printf("");

      bkprint_listnode(head);
      #endif

      printf("max = %d",max_list(head));
      printf("max = %d",min_list(head));
      delete_list(head);

      head = NULL;

      if(head== NULL)
      {
      printf("ERROR:null pointer!...");
      }
      return 0;
      }

      遞歸中需要注意的思想我任務(wù)就是為了解決當(dāng)前的問(wèn)題,我完成最簡(jiǎn)單的一部操作,其他的由別人去完成,比如漢諾塔中的第一個(gè)和尚讓第二個(gè)和尚把前63個(gè)金盤放在B處,而他自己只需要完成從A到C的搬運(yùn),實(shí)質(zhì)上他自己完成的只有一部最簡(jiǎn)答的,但是搬運(yùn)這種動(dòng)作有存在非常大的相似性。

      因此為了解決當(dāng)前的問(wèn)題f(n),就需要解決問(wèn)題f(n-1),而f(n-1)的解決就需要解決f(n-2),這樣逐層的分解,分解成很多相似的小事件,當(dāng)最小的事件解決完成以后,就能解決高層次的事件,這種逐層分解,逐層合并的方式就構(gòu)成了遞歸的思想,最主要的要找到遞歸的出口和遞歸的方式,搞清楚了這兩個(gè),實(shí)現(xiàn)一個(gè)遞歸問(wèn)題相對(duì)來(lái)說(shuō)就比較簡(jiǎn)單啦。

      但是遞歸也存在問(wèn)題,特別是深層次的遞歸可能導(dǎo)致??臻g的溢出,因?yàn)槎褩?臻g的大小并不是無(wú)限大的,特別當(dāng)遞歸中數(shù)據(jù)量特別大的情況下,遞歸很有可能導(dǎo)致??臻g的溢出,因此遞歸并不是萬(wàn)能的,但是遞歸確實(shí)是一種思考問(wèn)題的方式,一種反向思考的形式,從結(jié)果到具體的小過(guò)程。當(dāng)然具體的問(wèn)題就要具體分析啦。

      用一句簡(jiǎn)單的話記住遞歸就是:我完成最簡(jiǎn)單的那一步,其他的復(fù)雜的相似問(wèn)題都找別人去做吧。


      上一頁(yè) 1 2 下一頁(yè)

      評(píng)論


      技術(shù)專區(qū)

      關(guān)閉