glxhyt
C++博客
::
首頁
::
新隨筆
::
聯(lián)系
::
聚合
::
管理
::
15 隨筆 :: 0 文章 :: 4 評論 :: 0 Trackbacks
<
2011年11月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
給我留言
查看公開留言
查看私人留言
隨筆檔案
2013年5月 (2)
2012年5月 (1)
2012年2月 (1)
2011年11月 (5)
2010年10月 (1)
2010年9月 (1)
2010年8月 (4)
搜索
最新評論
1.?re: 【轉(zhuǎn)】C/C++開源項目中的100個Bugs | WHO1753
.
--zgpxgame
2.?re: 自己工作中犯的幾個小問題
可以把你遇到的問題描述的詳細點嗎?
--鐘謝偉
3.?re: 自己工作中犯的幾個小問題
評論內(nèi)容較長,點擊標題查看
--郭龍
4.?re: 自己工作中犯的幾個小問題
評論內(nèi)容較長,點擊標題查看
--鐘謝偉
閱讀排行榜
1.?[轉(zhuǎn)]二維數(shù)組和二級指針 (5618)
2.?一個簡單的用c++寫的log(1680)
3.?linux 下的一個程序代碼統(tǒng)計的程序(類圖,時序圖,測試例子,代碼,心得)(1558)
4.?以前的一些mfc的筆記(關(guān)于孫鑫的那本書)(1132)
5.?【轉(zhuǎn)】字符串查找算法總結(jié)(739)
評論排行榜
1.?自己工作中犯的幾個小問題(3)
2.?【轉(zhuǎn)】C/C++開源項目中的100個Bugs | WHO1753(1)
3.?【轉(zhuǎn)】字符串查找算法總結(jié)(0)
4.?著名的Josephus問題(0)
5.?一個簡單的用c++寫的log(0)
鏈表
越來越感到自己基礎(chǔ)差了
今天看到 李先靜老師 系統(tǒng)程序員成長計劃 那本書上寫道
編寫通用的鏈表的
于是自己練習(xí)寫了一下,主要是 void* --> int* int*--> void*
沒想到指針的生命周期,整暈了,調(diào)試了好久。
typedef struct tagNode_t
{
struct tagNode_t *pPre;
struct tagNode_t *pNex;
void * pData;
}Node_t;
主要是因為 當時把 void * pData;當成int一樣賦值
pTemp->pData = (void*)&i;
沒有考慮到i的生命周
//
編寫通用的鏈表的定義
//
1
#if
0
typedef
int
Type;
typedef
struct
tagNode_t
{
struct
tagNode_t
*
pstPre;
struct
tagNode_t
*
pstNex;
Type ElemType;
}
Node_t;
//
2 good
//
存入時拷貝一份數(shù)據(jù),保存數(shù)據(jù)的指針和長度。
//
考慮到拷貝數(shù)據(jù)會帶來性能開銷,不合符C
//
語言的風(fēng)格,而且C 語言中沒有構(gòu)造函數(shù),
//
實現(xiàn)深拷貝比較麻煩,所以在C 語言中以這種
//
實現(xiàn)的鏈表很少見
typedef
struct
tagNode_t
{
struct
tagNode_t
*
pstPre;
struct
tagNode_t
*
pstNex;
void
*
pData;
int
iLength;
}
Node_t;
#endif
//
3 best
/**/
/*
只是保存指向?qū)ο蟮闹羔槪嫒⌒矢撸?br />
是C語言中常見的做法。在存放整數(shù)時,
可以把void*強制轉(zhuǎn)換成整數(shù)使用,
以避免內(nèi)存分配(在現(xiàn)實中,90%以上的情況,
鏈表都是存放結(jié)構(gòu)的)。
*/
#include
<
iostream
>
using
namespace
std;
typedef
struct
tagNode_t
{
struct
tagNode_t
*
pPre;
struct
tagNode_t
*
pNex;
void
*
pData;
}
Node_t;
typedef
struct
tagList_t
{
Node_t pHead;
}
List_t;
#if
0
#define
LIST_OK 1
#define
LIST_NG 0
//
tagStautus_u
#endif
typedef
enum
tagStatusEnum
{
LIST_NG
=
0
,
LIST_OK,
}
StatusEnum;
//
typedef StatusEnum (pFun *)(void * data);
typedef StatusEnum (
*
pFun ) (
void
*
data);
#if
0
StatusEnum CreateList(Node_t
**
p ,
int
i);
#else
StatusEnum CreateList(Node_t
*
p ,
int
*
i);
#endif
StatusEnum PrintList(List_t
*
p, pFun print);
StatusEnum DeleteList(List_t
*
p);
StatusEnum PrintStatus(
void
*
p);
//
LIST_t list;
#if
0
StatusEnum CreateList(Node_t
**
p ,
int
i)
#endif
StatusEnum CreateList(Node_t
*
p ,
int
*
i)
{
Node_t
*
pTemp
=
new
Node_t;
pTemp
->
pPre
=
NULL;
pTemp
->
pNex
=
NULL;
pTemp
->
pData
=
i;
//
NULL List Insert
#if
0
if
(
*
p
==
NULL)
{
*
p
=
pTemp;
//
list.pHead = pTemp;
(
*
p)
->
pNex
=
NULL;
(
*
p)
->
pPre
=
NULL;
}
//
Tail Insert
//
pTemp->pNex = *p->pNex;
pTemp
->
pPre
=
*
p;
(
*
p)
->
pNex
=
pTemp;
//
pTemp->pNex->pPre = pTemp;
//
Move Tail
*
p
=
(
*
p)
->
pNex;
#endif
pTemp
->
pNex
=
(p)
->
pNex;
(p)
->
pNex
=
pTemp;
pTemp
->
pPre
=
p;
if
(NULL
!=
pTemp
->
pNex)
{
pTemp
->
pNex
->
pPre
=
pTemp;
}
return
LIST_OK;
}
int
main(
int
argc,
char
**
argv)
{
//
Node_t *pRoot = NULL;
List_t list;
(list.pHead).pPre
=
NULL;
(list.pHead).pNex
=
NULL;
(list.pHead).pData
=
NULL;
//
for (int i = 0; i < 5; ++ i)
//
{
//
CreateList(&pRoot, i);
#if
0
CreateList(
&
((list.pHead).pNex), i);
#endif
static
int
i
=
3
;
static
int
j
=
4
;
CreateList(
&
(list.pHead),
&
i);
CreateList(
&
(list.pHead),
&
j);
//
}
PrintList(
&
list, PrintStatus);
DeleteList(
&
list);
return
0
;
}
StatusEnum PrintList(List_t
*
p, pFun print)
{
Node_t
*
pTemp
=
p
->
pHead.pNex;
while
( NULL
!=
pTemp)
{
print(pTemp
->
pData);
pTemp
=
pTemp
->
pNex;
}
return
LIST_OK;
}
StatusEnum PrintStatus(
void
*
p)
{
//
cout<<"A "<<(int) (*p);
cout
<<
"
B
"
<<*
(
int
*
)p
<<
endl;
return
LIST_OK;
}
StatusEnum DeleteList(List_t
*
p)
{
Node_t
*
pTemp
=
p
->
pHead.pNex;
Node_t
*
pCur
=
NULL;
while
( NULL
!=
pTemp)
{
pCur
=
pTemp;
pTemp
=
pTemp
->
pNex;
delete pCur;
}
return
LIST_OK;
}
期
posted on 2011-11-27 16:02
郭龍
閱讀(312)
評論(0)
編輯
收藏
引用
只有注冊用戶
登錄
后才能發(fā)表評論。
【推薦】100%開源!大型工業(yè)跨平臺軟件C++源碼提供,建模,組態(tài)!
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © 郭龍
欧美噜噜久久久XXX
|
久久综合九色综合欧美就去吻
|
日日噜噜夜夜狠狠久久丁香五月
|
久久亚洲国产成人精品无码区
|
国内精品久久久久影院网站
|
精品久久久久中文字
|
久久天天躁狠狠躁夜夜2020一
|
亚洲婷婷国产精品电影人久久
|
亚洲精品无码久久久久
|
久久久久亚洲精品天堂久久久久久
|
亚洲va久久久噜噜噜久久
|
精品久久久久久久久久久久久久久
|
久久精品国产亚洲AV香蕉
|
久久精品国产亚洲7777
|
2022年国产精品久久久久
|
亚洲国产另类久久久精品小说
|
久久精品男人影院
|
色欲久久久天天天综合网精品
|
久久久久久亚洲精品不卡
|
久久福利青草精品资源站免费
|
9999国产精品欧美久久久久久
|
丁香色欲久久久久久综合网
|
久久精品国产一区二区
|
香港aa三级久久三级
|
久久99精品国产
|
国产欧美久久一区二区
|
人妻无码αv中文字幕久久
|
久久经典免费视频
|
人妻无码久久精品
|
天堂无码久久综合东京热
|
久久影视国产亚洲
|
欧美日韩中文字幕久久久不卡
|
国产精品VIDEOSSEX久久发布
|
一本大道加勒比久久综合
|
国产AⅤ精品一区二区三区久久
|
久久er热视频在这里精品
|
91久久精品无码一区二区毛片
|
精品久久久久久亚洲
|
一级做a爰片久久毛片16
|
久久久久噜噜噜亚洲熟女综合
|
久久久久亚洲AV综合波多野结衣
|