欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++數據結構之鏈表的創(chuàng)建

 更新時間:2022年05月20日 09:25:42   作者:infoworld  
這篇文章主要介紹了C++數據結構之鏈表的創(chuàng)建的相關資料,希望通過本文幫助到大家,讓大家理解掌握這部分內容,需要的朋友可以參考下

C++數據結構之鏈表的創(chuàng)建

前言

1.鏈表在C/C++里使用非常頻繁, 因為它非常使用, 可作為天然的可變數組. push到末尾時對前面的鏈表項不影響. 反觀C數組和std::vector, 一個是靜態(tài)大小, 一個是增加多了會對之前的元素進行復制改寫(線程非常不安全).

2.通常創(chuàng)建鏈表都是有next這樣的成員變量指向下一個項, 通過定義一個head,last來進行鏈表創(chuàng)建. 參考函數 TestLinkCreateStupid().

說明

1.其實很早就知道另一種創(chuàng)建方式, 但是一直沒總結. 沒見過的童鞋看看以下創(chuàng)建鏈表的方式你用了哪一種. linus說了不會第一種的TestLinkCreateClever()根本不會用指針(看來我真不會用指針). 這種方式在循環(huán)里根本不用判斷, 可見效率有多高.

// test_shared.cpp : 定義控制臺應用程序的入口點。
//

#include "stdafx.h"
#include <memory>
#include <string>
#include <iostream>

typedef struct stage_tag {
  int         data_ready;   /* Data present */
  long        data;      /* Data to process */
  struct stage_tag  *next;     /* Next stage */
} stage_t;

// 高效率的鏈表創(chuàng)建方式
stage_t* TestLinkCreateClever(int stages)
{
  stage_t *head = NULL,*new_stage = NULL,*tail = NULL;
  stage_t **link = &head; // 區(qū)別在這個指針地址變量上,它起到綁定新的stage的作用.
  for(int i =0; i<stages;++i)
  {
    new_stage = (stage_t*)malloc(sizeof(stage_t));   
    new_stage->data_ready = 0;
    new_stage->data = i;

    *link = new_stage; // 把新的stage賦值給link指向的指針地址
    link = &new_stage->next; // 綁定下一個的指針地址
  }

  tail = new_stage;
  *link = NULL;

  return head;
}

// 低效率的鏈表創(chuàng)建方式
stage_t* TestLinkCreateStupid(int stages)
{
  stage_t *head = NULL,*new_stage = NULL,*tail = NULL;
  for(int i =0; i<stages;++i)
  {
    new_stage = (stage_t*)malloc(sizeof(stage_t));   
    new_stage->data_ready = 0;
    new_stage->data = i;
    new_stage->next = NULL;

    if(tail)
      tail->next = new_stage;
    else
      head = new_stage;

    tail = new_stage;
  }
  return head;
}

int _tmain(int argc, _TCHAR* argv[])
{
  std::cout << "=== TestLinkCreateClever ===" << std::endl;
  auto first = TestLinkCreateClever(10);
  while(first)
  {
    std::cout << "data: " << first->data << std::endl;
    first = first->next;
  }

  std::cout << "=== TestLinkCreateStupid ===" << std::endl;
  auto second = TestLinkCreateStupid(10);
  while(second)
  {
    std::cout << "data: " << second->data << std::endl;
    second = second->next;
  }
  return 0;
}


如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • C語言實現(xiàn)高精度加法

    C語言實現(xiàn)高精度加法

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)高精度加法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C++實現(xiàn)LeetCode(121.買賣股票的最佳時間)

    C++實現(xiàn)LeetCode(121.買賣股票的最佳時間)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(121.買賣股票的最佳時間),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • Qt編寫顯示密碼強度的控件

    Qt編寫顯示密碼強度的控件

    這篇文章主要為大家詳細介紹了Qt編寫顯示密碼強度的控件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語言之數組名與數組起始地址的關系解析

    C語言之數組名與數組起始地址的關系解析

    這篇文章主要介紹了C語言之數組名與數組起始地址的關系,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++ primer超詳細講解順序容器

    C++ primer超詳細講解順序容器

    本文主要介紹了C++順序容器(vector、deque、list)的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • C/C++動態(tài)分配與釋放內存的區(qū)別詳細解析

    C/C++動態(tài)分配與釋放內存的區(qū)別詳細解析

    以下是對C與C++中動態(tài)分配與釋放內存的區(qū)別進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-09-09
  • C/C++?string.h庫中memcpy()和memmove()的使用

    C/C++?string.h庫中memcpy()和memmove()的使用

    memcpy與memmove的目的都是將N個字節(jié)的源內存地址的內容拷貝到目標內存地址中,本文主要介紹了C/C++?string.h庫中memcpy()和memmove()的使用,感興趣的可以了解一下
    2023-12-12
  • C++中getline()的用法詳解

    C++中getline()的用法詳解

    這篇文章主要介紹了C++中getline()的用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • 淺談C++中各種不同意義的new和delete的使用

    淺談C++中各種不同意義的new和delete的使用

    本文主要介紹了淺談C++中各種不同意義的new和delete的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • C語言實現(xiàn)掃雷附完整代碼

    C語言實現(xiàn)掃雷附完整代碼

    本文詳細講解了C語言實現(xiàn)掃雷并附完整代碼,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11

最新評論