glxhyt
C++博客
::
首頁
::
新隨筆
::
聯系
::
聚合
::
管理
::
15 隨筆 :: 0 文章 :: 4 評論 :: 0 Trackbacks
<
2010年8月
>
日
一
二
三
四
五
六
25
26
27
28
29
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
31
1
2
3
4
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
給我留言
查看公開留言
查看私人留言
隨筆檔案
2013年5月 (2)
2012年5月 (1)
2012年2月 (1)
2011年11月 (5)
2010年10月 (1)
2010年9月 (1)
2010年8月 (4)
搜索
最新評論
1.?re: 【轉】C/C++開源項目中的100個Bugs | WHO1753
.
--zgpxgame
2.?re: 自己工作中犯的幾個小問題
可以把你遇到的問題描述的詳細點嗎?
--鐘謝偉
3.?re: 自己工作中犯的幾個小問題
評論內容較長,點擊標題查看
--郭龍
4.?re: 自己工作中犯的幾個小問題
評論內容較長,點擊標題查看
--鐘謝偉
閱讀排行榜
1.?[轉]二維數組和二級指針 (5610)
2.?一個簡單的用c++寫的log(1673)
3.?linux 下的一個程序代碼統計的程序(類圖,時序圖,測試例子,代碼,心得)(1548)
4.?以前的一些mfc的筆記(關于孫鑫的那本書)(1127)
5.?【轉】字符串查找算法總結(730)
評論排行榜
1.?自己工作中犯的幾個小問題(3)
2.?【轉】C/C++開源項目中的100個Bugs | WHO1753(1)
3.?【轉】字符串查找算法總結(0)
4.?著名的Josephus問題(0)
5.?一個簡單的用c++寫的log(0)
鏈表
越來越感到自己基礎差了
今天看到 李先靜老師 系統程序員成長計劃 那本書上寫道
編寫通用的鏈表的
于是自己練習寫了一下,主要是 void* --> int* int*--> void*
沒想到指針的生命周期,整暈了,調試了好久。
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
//
存入時拷貝一份數據,保存數據的指針和長度。
//
考慮到拷貝數據會帶來性能開銷,不合符C
//
語言的風格,而且C 語言中沒有構造函數,
//
實現深拷貝比較麻煩,所以在C 語言中以這種
//
實現的鏈表很少見
typedef
struct
tagNode_t
{
struct
tagNode_t
*
pstPre;
struct
tagNode_t
*
pstNex;
void
*
pData;
int
iLength;
}
Node_t;
#endif
//
3 best
/**/
/*
只是保存指向對象的指針,存取效率高,
是C語言中常見的做法。在存放整數時,
可以把void*強制轉換成整數使用,
以避免內存分配(在現實中,90%以上的情況,
鏈表都是存放結構的)。
*/
#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
郭龍
閱讀(304)
評論(0)
編輯
收藏
引用
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © 郭龍
狠狠人妻久久久久久综合
|
亚洲精品国精品久久99热
|
亚洲国产精品成人久久蜜臀
|
久久er热视频在这里精品
|
久久精品无码专区免费青青
|
99久久国产宗和精品1上映
|
久久人人爽人人爽人人片av麻烦
|
久久久久久久久久久久中文字幕
|
久久AV高清无码
|
亚洲国产精品一区二区久久hs
|
狠狠久久综合伊人不卡
|
亚洲日本va午夜中文字幕久久
|
久久青青国产
|
国内精品伊人久久久久
|
久久久久无码精品
|
伊人丁香狠狠色综合久久
|
伊人久久精品无码av一区
|
国产精品久久久久影院色
|
中文字幕乱码人妻无码久久
|
77777亚洲午夜久久多喷
|
四虎国产精品成人免费久久
|
久久国产免费观看精品
|
中文字幕久久精品
|
一本久久a久久精品综合夜夜
|
久久精品国产男包
|
久久亚洲国产精品123区
|
精品久久久久久亚洲
|
久久精品国产色蜜蜜麻豆
|
AAA级久久久精品无码区
|
国产精品久久一区二区三区
|
女人高潮久久久叫人喷水
|
久久国产午夜精品一区二区三区
|
亚洲国产精品18久久久久久
|
久久精品亚洲福利
|
久久精品无码一区二区三区免费
|
久久不射电影网
|
国产亚洲欧美成人久久片
|
亚洲va久久久噜噜噜久久狠狠
|
久久受www免费人成_看片中文
|
国产高潮久久免费观看
|
久久精品国产99国产精偷
|