日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言编程切片stl1005无标题,C语言实现简单的单向链表(创建、插入、删除)及等效STL实现代码...

發布時間:2024/9/30 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言编程切片stl1005无标题,C语言实现简单的单向链表(创建、插入、删除)及等效STL实现代码... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實現個算法,懶得手寫鏈表,于是用C++的forward_list,沒有next()方法感覺很不好使,比如一個對單向鏈表的最簡單功能要求:

input:

1 2 5 3 4

output:

1->2->5->3->4

相當于僅僅實現了插入、遍歷2個功能(當然遍歷功能稍微修改就是銷毀鏈表了)

用純C寫了份測試代碼

/*基本數據結構的定義以及函數的聲明 */

typedef intElemType;

typedefstructNode

{

ElemType elem;struct Node*next;

} Node,* NodePtr, **ForwardList;

NodePtr createNode(ElemType x);voidshowList(ForwardList lst);voiddestroyList(ForwardList lst);//創建元素為x的節點并插入到節點where后面//若where為NULL, 則插入到鏈表lst的首部作為首節點//返回新節點的指針

NodePtr insertAfterNode(NodePtr where, ElemType x,

ForwardList lst);

/*鏈表相關函數的具體實現*/NodePtr createNode(ElemType x)

{

NodePtr pNode= (NodePtr) malloc(sizeof(Node));if (pNode ==NULL) {

perror("malloc");

exit(1);

}

pNode->elem =x;

pNode->next =NULL;returnpNode;

}

NodePtr insertAfterNode(const NodePtr where,

ElemType x, ForwardList lst)

{

NodePtr pNode=createNode(x);if (where ==NULL) {*lst =pNode;

}else{

pNode->next = where->next;where->next =pNode;

}returnpNode;

}voidshowList(ForwardList lst)

{

printf("顯示鏈表:");

NodePtr curr= *lst;while (curr->next !=NULL) {

printf("%d->", curr->elem);

curr= curr->next;

}

printf("%d", curr->elem);

}voiddestroyList(ForwardList lst)

{

printf("銷毀鏈表:");

NodePtr curr= *lst;while (curr !=NULL) {

NodePtr next= curr->next;

printf("%d", curr->elem);free(curr);

curr=next;

}

printf("");

}

/*測試代碼*/

intmain()

{

NodePtr head=NULL;

initListFromStdin(&head);

showList(&head);

destroyList(&head);return 0;

}

三個部分都是寫在一份代碼里(forward_list.c)的,測試結果如下

$ lsdata.inforward_list.c

$cat data.in

1 2 5 3 4$gcc forward_list.c -std=c99

$ ./a.out 2->5->3->4銷毀鏈表:1 2 5 3 4

由于是不需要考慮周全的C代碼,所以很多C++的一些工程性的技巧不需考慮,比如模板、const,說起來之前沒把C代碼封裝成函數的時候就曾經導致鏈表的頭節點被修改,最后銷毀鏈表時,遍歷后頭節點直接指向了最后一個節點,導致前4個節點都沒被銷毀。如果合理地使用const,在編譯期就能檢查出來。

嘛,其實這么一寫下來,C++的forward_list版本也就寫出來了,畢竟我的鏈表插入函數就是模仿forward_list的,但是寫出來有點別扭。因為需要遍歷到倒數第2個節點停止,最后代碼如下

#include

#include

using namespace std;

// 取得前向迭代器it的下一個迭代器

template

FwIter nextIter(FwIter it)

{

return ++it;

}

int main()

{

forward_list lst;

int x;

for (auto it = lst.before_begin();

fscanf(stdin, "%d", &x) == 1;

)

{

it = lst.emplace_after(it, x);

}

// 按照a0->a1->...->an的格式輸出

auto it = lst.begin();

while (nextIter(it) != lst.end())

{

printf("%d->", *it++);

}

printf("%d

", *it);

return 0;

}

既然C++不提供next()函數那就只有手寫一個,因為迭代器傳參數時拷貝了一份,所以nextIter()直接返回++it并不會對原迭代器進行修改,而是修改的原迭代器的拷貝。

注意一點就是,在順序插入構建鏈表時需要記錄鏈表最后一個節點,跟我的C代碼實現風格一致(好吧其實我本來就是仿STL實現的)。

那么初始值就是before_begin()而不是begin(),因為空鏈表不存在begin(),確切的說空鏈表的初始節點為NULL。

測試代碼,這里_M_node是glibc++的forward_list迭代器底層實現部分,并不是跨平臺代碼。迭代器相當于把節點地址進行了一層封裝,而_M_node則是節點地址。

#include #include

intmain()

{

std::forward_listlst;

printf("begin()地址: %p", lst.begin()._M_node);

printf("before_begin()地址: %p", lst.before_begin()._M_node);return 0;

}

結果如下:

$ g++ test.cc -std=c++11$ ./a.out

begin()地址: (nil)

before_begin()地址:0x7fffb0896b60

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的c语言编程切片stl1005无标题,C语言实现简单的单向链表(创建、插入、删除)及等效STL实现代码...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美视频四区 | 国产熟妇与子伦hd | 国模少妇一区二区三区 | 5个黑人躁我一个视频 | 亚洲av第一成肉网 | 日本美女久久久 | 操人视频网站 | 国产精品无码久久久久 | 午夜18视频在线观看 | 动漫美女隐私无遮挡 | 伊人久久婷婷 | 青草操 | 息与子五十路翔田千里 | n0659极腔濑亚美莉在线播放播放 | 亚洲乱轮视频 | h无码动漫在线观看 | 特黄aaaaaaaaa毛片免费视频 | 四川丰满少妇被弄到高潮 | 日本中文一区 | 国产亚洲精品久久久久久久 | 99自拍视频在线观看 | 美女啪啪无遮挡 | av动漫免费观看 | 日韩一级黄| 黄色网址多少 | 91黄色在线观看 | 久久久久久久极品 | 91桃色在线观看 | 99精品99 | 美女色呦呦 | 少妇肥臀大白屁股高清 | 天堂网视频在线观看 | 成人精品毛片 | 黄色大全免费看 | 少妇被又大又粗又爽毛片久久黑人 | 穿情趣内衣被c到高潮视频 欧美性猛交xxxx黑人猛交 | 日本熟伦人妇xxxx | 日韩精品偷拍 | 亚洲乱论| 国产精品高潮呻吟久久 | 国产精品日韩精品欧美精品 | 污视频网站入口 | 日韩精品第三页 | 老外黄色一级片 | 国产精品高潮呻吟av | 成人国产精品免费观看 | 男男全肉变态重口高h | 国产精品传媒在线 | 深夜福利网站在线观看 | 抱着老师的嫩臀猛然挺进视频 | 91成人高清 | 婷婷久久伊人 | 国产精品天美传媒沈樵 | 强开小受嫩苞第一次免费视频 | 久久成人综合 | 玉丸(双性调教) | 亚洲一区二区自拍 | 一区二区不卡av | 亚洲69视频 | 在线视频 中文字幕 | 亚洲精品一区三区三区在线观看 | 欧美成综合 | aaa国产| 欧美精品在线看 | 国产成人免费片在线观看 | 欧美性猛交性大交 | 性做久久久久 | 丁香一区二区三区 | 特黄视频免费看 | 天堂中文字幕 | 午夜激情视频 | 男人插入女人下面的视频 | 日韩和一区二区 | 国产在线观看无码免费视频 | www.蜜臀av| 91久久精品日日躁夜夜躁欧美 | 少妇中文字幕 | jizz中国少妇 | 91高清国产 | 午夜精产品一区二区在线观看的 | 天天摸天天碰天天爽天天弄 | 男女精品视频 | 亚洲瘦老头同性xxxxx | 久久入口 | 欧美乱妇高清无乱码 | aa视频在线 | 天天插天天爽 | 午夜影院在线观看18 | 精品av一区二区 | 先锋资源av在线 | 在线看福利影 | 男生舔女生胸 | 人妻少妇精品久久 | jzzijzzij亚洲成熟少妇在线播放 狠狠躁日日躁夜夜躁2022麻豆 | 午夜啪视频 | 特级淫片裸体免费看冫 | 日韩欧美精品免费 | 精品久久综合 | 欧美最猛黑人xxxx黑人猛交 |