锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
榪欐榪樻湁鍙ヨ璇寸殑灝辨槸錛氾紙鍦ㄦ妸錛及錛ワ籍琛ㄤ腑鏈浼樺肩殑鑺傜偣鎻掑叆銆錛o棘錛汲錛ヨ〃涓椂濡傛灉鍦跡錛集錛籌譏琛ㄤ腑宸茬粡瀛樺湪閭e氨瑕佹瘮杈冿紝濡傛灉瀛樺湪鐨勮妭鐐圭殑鏉冨兼瘮瑕佹彃鍏ョ殑澶э紝灝辮鎶婂瓨鍦ㄧ殑鏇挎崲鎺夛紙鑺傜偣涓墍鏈夊唴瀹?/span>錛夛紝鍚﹀垯灝卞拷鐣?/span>錛夛紟
絎紦姝ワ細(xì)灝辨槸閲嶅絎紥姝ラ錛堢ず渚嬪浘濡備笅錛?br>
鎴戞兂鍥犺鏄庣櫧浜嗗惂錛?br>
濂戒簡鏈鍚庝竴寮犲畬宸ワ紒
緇堢偣錛?2鑺傜偣錛夋壘鍒頒簡鏄惂錛佹垜鎯沖洜璇ユ槑鐧戒簡鍚э紒
鍥劇敾鐨勪笉澶ソ, :)
緇胯壊鐨勬槸鑺傜偣,綰㈣壊鐨勪負(fù)鏉冨?綆ご涓哄彲閫氳鐨勬爣蹇?
鐜板湪鎴戜滑瑕佷粠 0 鑺傜偣 鍒?12 鑺傜偣 鎵句竴鏉℃渶浼樿礬寰?
棣栧厛鍜變滑瑕佽В鍐砃ODE鐐瑰瓨璐殑淇℃伅(緇撴瀯):
struct NodeBaseInfo
{
unsigned short nNodeID;銆銆銆//鐣彿
unsigned long nMeasure; //鏉冨?br> NodeBaseInfo *pParent; //鐖惰妭鐐?br>};
鎴戝啓浜嗙畝鍗曠殑緇撴瀯澶у鍙互鏍規(guī)嵁鑷繁闇瑕佸畾涔夛紙瀹氫箟榪欎釜緇撴瀯鏄負(fù)浜嗘洿濂界悊瑙o級
涓嬮潰璁茬殑鏄渶涓昏鐨勪簡錛?br>DIJKSTAR綆楁硶涓瀹氫箟涓や釜琛細(xì)OPEN 鍜?CLOSE 錛堝叾瀹炲彲浠ョ湅浣滈摼琛級
浠栫殑鍘熺悊灝辨槸鎶婃病鏈夐亶鍘嗙殑鐐規(guī)斁鍦?OPEN 琛ㄤ腑錛屾妸浠?OPEN琛ㄤ腑閬嶅巻鍒扮殑鏈鐭潈鍊肩殑鐐規(guī)斁鍏?br>CLOSE 琛ㄤ腑錛屽綋鎻掑叆 CLOSE琛ㄤ腑鐨勮妭鐐圭殑鐣彿浜庢垜浠鐨勯噸鐐規(guī)椂綆楁硶緇撴潫錛涚劧鍚庢寜鐓х埗鑺傜偣錛坧Parent錛?br>鍚戜笂閫掑綊灝卞彲浠ュ緱鍒版垜浠鐨勬渶浼樿礬寰勪簡銆?br>
絎竴姝ワ細(xì)搴斾負(fù) OPEN 鍜孋LOSE琛ㄩ兘鏄┖鐨勶紝鎶婅搗鐐癸紙0鑺傜偣錛夋彃鍏LOSE鏍囦腑錛屽畠鐨勬潈鍊間負(fù)0銆傛妸璧風(fēng)偣錛?鑺傜偣錛夐檮榪戠殑鑺傜偣錛堝洜璇ヤ負(fù)鍙氳鐨勶級鎻掑叆OPEN 琛ㄤ腑錛?u style="COLOR: red">鏈濂芥寜鏉冨間粠澶ч亾灝忕殑欏哄簭鎻掑叆錛岃繖鏍峰彇寰楁渶浼樺兼椂錛岃繖鏍烽熷害灝變細(xì)寰堝揩錛夈傦紙濡傜ず渚嬪浘錛?br>
絎?姝ワ細(xì)浠嶰PEN琛ㄤ腑鎵懼埌鏉冨兼渶灝忕殑鑺傜偣錛屾妸瀹冩彃鍏LOSE 琛ㄤ腑, 鎶婅繖涓妭鐐圭殑鍙繛閫氱殑鑺傜偣鏌ュ叆錛及錛ワ籍
琛紝錛?span style="COLOR: red">濡傛灉錛及錛ワ籍琛ㄤ腑瀛樺湪瑕佹煡鍏ョ殑鐐癸紝濡傛灉瑕佹彃鍏ョ殑鑺傜偣鐨勬潈鍊兼瘮宸茬粡瀛樺湪鐨勫皬錛屽氨鎶婂凡緇忔煡鍏ョ殑鏉冨艱涓烘渶灝忕殑錛屽鏋滆鎻掑叆鐨勮妭鐐圭殑鏉冨兼瘮宸茬粡瀛樺湪鐨勫ぇ錛屽氨蹇借惤瀹?/u>錛庯級
錛堜負(fù)浜嗘洿濂界殑鐞嗚В鎴戞妸鐖惰妭鐐逛篃鍔犲叆浜嗭紝濡傜ず渚嬪浘錛?br>
鎴戜滑鍏堟潵鐪嬬湅10榪涘埗涓嬫槸濡備綍鎵嬪伐璁$畻寮鏂圭殑銆?br>鍏堢湅涓嬮潰涓や釜綆楀紡錛?br>x = 10*p + q (1)
鍏紡(1)宸﹀彸騫蟲柟涔嬪悗寰楋細(xì)
x^2 = 100*p^2 + 20pq + q^2 (2)
鐜板湪鍋囪鎴戜滑鐭ラ亾x^2鍜宲錛屽笇鏈涙眰鍑簈鏉ワ紝姹傚嚭浜唓涔熷氨姹傚嚭浜唜^2鐨勫紑鏂箈浜嗐?br>鎴戜滑鎶婂叕寮?2)鏀瑰啓涓哄涓嬫牸寮忥細(xì)
q = (x^2 - 100*p^2)/(20*p+q) (3)
榪欎釜綆楀紡宸﹀彸閮芥湁q錛屽洜姝ゆ棤娉曠洿鎺ヨ綆楀嚭q鏉ワ紝鍥犳鎵嬪伐鐨勫紑鏂圭畻娉曞拰鎵嬪伐闄ゆ硶綆楁硶涓鏍鋒湁涓姝ラ渶瑕佺寽鍊箋?/p>
鎴戜滑鏉ヤ竴涓墜宸ヨ綆楃殑渚嬪瓙錛氳綆?234567890鐨勫紑鏂?/p>
棣栧厛鎴戜滑鎶婅繖涓暟涓や綅涓や綅涓緇勫垎寮錛岃綆楀嚭鏈楂樹綅涓?銆備篃灝辨槸(3)涓殑p錛屾渶涓嬮潰涓琛岀殑334涓轟綑鏁幫紝涔熷氨鏄叕寮?3)涓殑(x^2 - 100*p^2)榪戜技鍊?br> 3
---------------
/ 12 34 56 78 90
9
---------------
/ 3 34
涓嬮潰鎴戜滑瑕佹壘鍒頒竴涓?-9鐨勬暟q浣垮畠鏈鎺ヨ繎婊¤凍鍏紡(3)銆傛垜浠厛鎶妏涔樹互20鍐欏湪334宸﹁竟錛?br> 3 q
---------------
/ 12 34 56 78 90
9
---------------
(20*3+q)*q / 3 34
鎴戜滑鐪嬪埌q涓?鏃?60+q)*q鐨勫兼渶鎺ヨ繎334錛岃屼笖涓嶈秴榪?34銆備簬鏄垜浠緱鍒幫細(xì)
3 5
---------------
/ 12 34 56 78 90
9
---------------
65 / 3 34
3 25
---------------
9 56
鎺ヤ笅鏉ュ氨鏄噸澶嶄笂闈㈢殑姝ラ浜嗭紝榪欓噷灝變笉鍐嶅暟鍡︿簡銆?
榪欎釜鎵嬪伐綆楁硶鍏跺疄鍜?0榪涘埗鍏崇郴涓嶅ぇ錛屽洜姝ゆ垜浠彲浠ュ緢瀹規(guī)槗鐨勬妸瀹冩敼涓轟簩榪涘埗錛屾敼涓轟簩榪涘埗涔嬪悗錛屽叕寮?3)灝卞彉鎴愪簡錛?br>q = (x^2 - 4*p^2)/(4*p+q) (4)
鎴戜滑鏉ョ湅涓涓緥瀛愶紝璁$畻100(浜岃繘鍒?100100)鐨勫紑鏂癸細(xì)
1 0 1 0
-----------
/ 1 10 01 00
1
-----------
100 / 0 10
0 00
-----------
1001 / 10 01
10 01
-----------
0 00
榪欓噷姣忎竴姝ヤ笉鍐嶆槸鎶妏涔樹互20浜嗭紝鑰屾槸鎶妏涔樹互4錛屼篃灝辨槸鎶妏鍙崇Щ涓や綅錛岃岀敱浜巕鐨勫煎彧鑳戒負(fù)0鎴栬?錛屾墍浠ユ垜浠彧闇瑕佸垽鏂綑鏁?x^2 - 4*p^2)鍜?4*p+1)鐨勫ぇ灝忓叧緋伙紝濡傛灉浣欐暟澶т簬絳変簬(4*p+q)閭d箞璇ヤ笂涓涓?錛屽惁鍒欒涓婁竴涓?銆?/p>
涓嬮潰緇欏嚭瀹屾垚鐨凜璇█紼嬪簭錛屽叾涓璻oot琛ㄧずp錛宺em琛ㄧず姣忔璁$畻涔嬪悗鐨勪綑鏁幫紝divisor琛ㄧず(4*p+1)錛岄氳繃a>>30鍙朼鐨勬渶楂?2浣嶏紝閫氳繃a<<=2灝嗚綆楀悗鐨勬渶楂?浣嶅墧闄ゃ傚叾涓璻oot鐨勪袱嬈?lt;<1鐩稿綋浜?*p銆傜▼搴忓畬鍏ㄦ槸鎸夌収鎵嬪伐璁$畻鏀瑰啓鐨勶紝搴旇涓嶉毦鐞嗚В銆?br>unsigned short sqrt(unsigned long a){
unsigned long rem = 0;
unsigned long root = 0;
unsigned long divisor = 0;
for(int i=0; i<16; ++i){
root <<= 1;
rem = ((rem << 2) + (a >> 30));
a <<= 2;
divisor = (root<<1) + 1;
if(divisor <= rem){
rem -= divisor;
root++;
}
}
return (unsigned short)(root);
}
CBitmap maskBMP;
maskBMP.CreateBitmap(nWidth, nHeight, 1, 1, NULL);//鍒涘緩鍗曡壊鎺╃爜浣嶅浘
CBitmap *pOldBMP = ImageDC.SelectObject(pBitmap);
CBitmap *maskOldBMP = maskDC.SelectObject(&maskBMP);
ImageDC.SetBkColor(clr);// 璁劇疆閫忔槑鑹?br> maskDC.BitBlt(0, 0, nWidth, nHeight, &ImageDC, nXsrc, nYsrc, SRCCOPY);
//璁劇疆鑳屾櫙鑹蹭負(fù)榛戣壊錛屽墠鏅壊涓虹櫧鑹詫紝灝嗘帺鐮佷綅鍥句笌鍘熶綅鍥劇浉"涓?
ImageDC.SetBkColor(RGB(0, 0, 0));
ImageDC.SetTextColor(RGB(255, 255, 255));
ImageDC.BitBlt(0, 0, nWidth, nHeight, &maskDC, nXsrc, nYsrc, SRCAND);
//璁劇疆鑳屾櫙鑹蹭負(fù)鐧借壊錛屽墠鏅壊涓洪粦鑹詫紝灝嗘帺鐮佷綅鍥句笌鑳屾櫙榪涜“涓?#8221;榪愮畻
pDestDC->SetBkColor(RGB(255, 255, 255));
pDestDC->SetTextColor(RGB(0, 0, 0));
pDestDC->BitBlt(nXDest, nYDest, nWidth, nHeight, &maskDC, nXsrc, nYsrc, SRCAND);
// "鎴?榪愮畻,鐢熸垚鏈緇堟晥鏋?br> pDestDC->BitBlt(nXDest, nYDest, nWidth, nHeight, &ImageDC, nXsrc, nYsrc, SRCPAINT);
if (pOldBMP) ImageDC.SelectObject(pOldBMP);
ImageDC.DeleteDC();
if (maskOldBMP) maskDC.SelectObject(maskOldBMP);
maskDC.DeleteDC();
if (maskBMP.m_hObject) maskBMP.DeleteObject();
}
BOOL TransparentBlt( HDC hdcDest, // 鐩爣DC int nXOriginDest, // 鐩爣X鍋忕Щ int nYOriginDest, // 鐩爣Y鍋忕Щ int nWidthDest, // 鐩爣瀹藉害 int hHeightDest, // 鐩爣楂樺害 HDC hdcSrc, // 婧怐C int nXOriginSrc, // 婧怷璧風(fēng)偣 int nYOriginSrc, // 婧怸璧風(fēng)偣 int nWidthSrc, // 婧愬搴? int nHeightSrc, // 婧愰珮搴? UINT crTransparent // 閫忔槑鑹?COLORREF綾誨瀷 );浣跨敤紺轟緥:
CBitmap FootballBMP; FootballBMP.LoadBitmap(IDB_FOOTBALLBMP); CDC ImageDC; ImageDC.CreateCompatibleDC(pDC); CBitmap *pOldImageBMP = ImageDC.SelectObject(&FootballBMP); TransparentBlt(pDC->m_hDC, 0, 0, 218, 199, ImageDC.m_hDC, 0, 0, 218, 199, RGB(0,0,0xff)); ImageDC.SelectObject(pOldImageBMP);浜屻佸疄鐜癟ransparentBlt鍑芥暟
HBITMAP hMaskBMP = CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL); // 寤虹珛鍗曡壊浣嶅浘 SetBkColor(hImageDC, RGB(0,0,0xff)); // 璁劇疆鑳屾櫙鑹蹭負(fù)钃濊壊 BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCCOPY); // 鎷瘋礉鍒癶MaskDC榪欐牱瓚崇悆浣嶅浘涓摑鑹插尯鍩熷湪鎺╃爜浣嶅浘涓垚浜嗙櫧鑹詫紝鍏跺畠鍖哄煙涓洪粦鑹詫紝姝ゆ椂hMaskBMP 濡備笅鍥?
SetBkColor(hImageDC, RGB(0,0,0)); SetTextColor(hImageDC, RGB(255,255,255)); BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);榪欐牱錛屾帺鐮佷綅鍥句腑鑳屾櫙鑹詫紙榛戣壊錛夌殑鍖哄煙鍦╤ImageBMP涓淇濈暀錛屽墠鏅壊錛堢櫧鑹詫級鐨勯儴鍒嗗彉涓洪粦鑹層?姝ゆ椂hImageBMP 濡備笅鍥?
SetBkColor(hdcDest,RGB(255,255,255)); SetTextColor(hdcDest,RGB(0,0,0)); BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);鎺╃爜涓櫧鑹插尯鍩燂紙鏁版嵁涓?鐩?#8220;涓?#8221;緇撴灉涓嶅彉錛変嬌鑳屾櫙淇濇寔涓嶅彉錛岄粦鑹插尯鍩熷彉鎴愰粦鑹詫紝姝ゆ椂鑳屾櫙鏄劇ず濡備笅:
BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCPAINT);榪欐牱灝卞皢瓚崇悆緇樺埗鍒拌儗鏅笂浜嗐?br>
void TransparentBlt2( HDC hdcDest, // 鐩爣DC int nXOriginDest, // 鐩爣X鍋忕Щ int nYOriginDest, // 鐩爣Y鍋忕Щ int nWidthDest, // 鐩爣瀹藉害 int nHeightDest, // 鐩爣楂樺害 HDC hdcSrc, // 婧怐C int nXOriginSrc, // 婧怷璧風(fēng)偣 int nYOriginSrc, // 婧怸璧風(fēng)偣 int nWidthSrc, // 婧愬搴? int nHeightSrc, // 婧愰珮搴? UINT crTransparent // 閫忔槑鑹?COLORREF綾誨瀷 ) { HBITMAP hOldImageBMP, hImageBMP = CreateCompatibleBitmap(hdcDest, nWidthDest, nHeightDest); // 鍒涘緩鍏煎浣嶅浘 HBITMAP hOldMaskBMP, hMaskBMP = CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL); // 鍒涘緩鍗曡壊鎺╃爜浣嶅浘 HDC hImageDC = CreateCompatibleDC(hdcDest); HDC hMaskDC = CreateCompatibleDC(hdcDest); hOldImageBMP = (HBITMAP)SelectObject(hImageDC, hImageBMP); hOldMaskBMP = (HBITMAP)SelectObject(hMaskDC, hMaskBMP); // 灝嗘簮DC涓殑浣嶅浘鎷瘋礉鍒頒復(fù)鏃禗C涓? if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc) BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcSrc, nXOriginSrc, nYOriginSrc, SRCCOPY); else StretchBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, SRCCOPY); // 璁劇疆閫忔槑鑹? SetBkColor(hImageDC, crTransparent); // 鐢熸垚閫忔槑鍖哄煙涓虹櫧鑹詫紝鍏跺畠鍖哄煙涓洪粦鑹茬殑鎺╃爜浣嶅浘 BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCCOPY); // 鐢熸垚閫忔槑鍖哄煙涓洪粦鑹詫紝鍏跺畠鍖哄煙淇濇寔涓嶅彉鐨勪綅鍥? SetBkColor(hImageDC, RGB(0,0,0)); SetTextColor(hImageDC, RGB(255,255,255)); BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND); // 閫忔槑閮ㄥ垎淇濇寔灞忓箷涓嶅彉錛屽叾瀹冮儴鍒嗗彉鎴愰粦鑹? SetBkColor(hdcDest,RGB(255,255,255)); SetTextColor(hdcDest,RGB(0,0,0)); BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND); // "鎴?榪愮畻,鐢熸垚鏈緇堟晥鏋? BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCPAINT); // 娓呯悊銆佹仮澶? SelectObject(hImageDC, hOldImageBMP); DeleteDC(hImageDC); SelectObject(hMaskDC, hOldMaskBMP); DeleteDC(hMaskDC); DeleteObject(hImageBMP); DeleteObject(hMaskBMP); }2.3 TransparentBlt鐨勫彟澶栦竴涓増鏈?TransparentBltU
bool TransparentBltU( HDC dcDest, // handle to Dest DC int nXOriginDest, // x-coord of destination upper-left corner int nYOriginDest, // y-coord of destination upper-left corner int nWidthDest, // width of destination rectangle int nHeightDest, // height of destination rectangle HDC dcSrc, // handle to source DC int nXOriginSrc, // x-coord of source upper-left corner int nYOriginSrc, // y-coord of source upper-left corner int nWidthSrc, // width of source rectangle int nHeightSrc, // height of source rectangle UINT crTransparent // color to make transparent ) { if (nWidthDest < 1) return false; if (nWidthSrc < 1) return false; if (nHeightDest < 1) return false; if (nHeightSrc < 1) return false; HDC dc = CreateCompatibleDC(NULL); HBITMAP bitmap = CreateBitmap(nWidthSrc, nHeightSrc, 1, GetDeviceCaps(dc, BITSPIXEL), NULL); if (bitmap == NULL) { DeleteDC(dc); return false; } HBITMAP oldBitmap = (HBITMAP)SelectObject(dc, bitmap); if (!BitBlt(dc, 0, 0, nWidthSrc, nHeightSrc, dcSrc, nXOriginSrc, nYOriginSrc, SRCCOPY)) { SelectObject(dc, oldBitmap); DeleteObject(bitmap); DeleteDC(dc); return false; } HDC maskDC = CreateCompatibleDC(NULL); HBITMAP maskBitmap = CreateBitmap(nWidthSrc, nHeightSrc, 1, 1, NULL); if (maskBitmap == NULL) { SelectObject(dc, oldBitmap); DeleteObject(bitmap); DeleteDC(dc); DeleteDC(maskDC); return false; } HBITMAP oldMask = (HBITMAP)SelectObject(maskDC, maskBitmap); SetBkColor(maskDC, RGB(0,0,0)); SetTextColor(maskDC, RGB(255,255,255)); if (!BitBlt(maskDC, 0,0,nWidthSrc,nHeightSrc,NULL,0,0,BLACKNESS)) { SelectObject(maskDC, oldMask); DeleteObject(maskBitmap); DeleteDC(maskDC); SelectObject(dc, oldBitmap); DeleteObject(bitmap); DeleteDC(dc); return false; } SetBkColor(dc, crTransparent); BitBlt(maskDC, 0,0,nWidthSrc,nHeightSrc,dc,0,0,SRCINVERT); SetBkColor(dc, RGB(0,0,0)); SetTextColor(dc, RGB(255,255,255)); BitBlt(dc, 0,0,nWidthSrc,nHeightSrc,maskDC,0,0,SRCAND); HDC newMaskDC = CreateCompatibleDC(NULL); HBITMAP newMask; newMask = CreateBitmap(nWidthDest, nHeightDest, 1, GetDeviceCaps(newMaskDC, BITSPIXEL), NULL); if (newMask == NULL) { SelectObject(dc, oldBitmap); DeleteDC(dc); SelectObject(maskDC, oldMask); DeleteDC(maskDC); DeleteDC(newMaskDC); DeleteObject(bitmap); DeleteObject(maskBitmap); return false; } SetStretchBltMode(newMaskDC, COLORONCOLOR); HBITMAP oldNewMask = (HBITMAP) SelectObject(newMaskDC, newMask); StretchBlt(newMaskDC, 0, 0, nWidthDest, nHeightDest, maskDC, 0, 0, nWidthSrc, nHeightSrc, SRCCOPY); SelectObject(maskDC, oldMask); DeleteDC(maskDC); DeleteObject(maskBitmap); HDC newImageDC = CreateCompatibleDC(NULL); HBITMAP newImage = CreateBitmap(nWidthDest, nHeightDest, 1, GetDeviceCaps(newMaskDC, BITSPIXEL), NULL); if (newImage == NULL) { SelectObject(dc, oldBitmap); DeleteDC(dc); DeleteDC(newMaskDC); DeleteObject(bitmap); return false; } HBITMAP oldNewImage = (HBITMAP)SelectObject(newImageDC, newImage); StretchBlt(newImageDC, 0, 0, nWidthDest, nHeightDest, dc, 0, 0, nWidthSrc, nHeightSrc, SRCCOPY); SelectObject(dc, oldBitmap); DeleteDC(dc); DeleteObject(bitmap); BitBlt( dcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, newMaskDC, 0, 0, SRCAND); BitBlt( dcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, newImageDC, 0, 0, SRCPAINT); SelectObject(newImageDC, oldNewImage); DeleteDC(newImageDC); SelectObject(newMaskDC, oldNewMask); DeleteDC(newMaskDC); DeleteObject(newImage); DeleteObject(newMask); return true; }
template<class T>
class Double;
template<class T>
class DoubleNode
{
friend class Double<T>;
private:
T data;
DoubleNode<T> *pre;
DoubleNode<T> *next;
};
template<class T>
class Double
{
public:
Double();//{head=end=NULL;}
~Double();
void Erase();
void reverse();
int GetLength()const;
bool IsEmpty()const;
bool Find(int k, T& x)const;
int Search(T& x)const;
Double<T>& Delete(int k, T& x);
Double<T>& Insert(int k, const T& x);
void output(ostream& out)const;
friend ostream& operator << (ostream& out, const Double<T>& x);
private:
DoubleNode<T> *head;
DoubleNode<T> *end;
int length;
};
template<class T>
Double<T>::Double()
{
head = new DoubleNode<T>;
end = new DoubleNode<T>;
head->pre = NULL;
head->next = end;
end->pre = head;
end->next = NULL;
length = 0;
}
template<class T>
Double<T>::~Double()
{
Erase();
}
template<class T>
void Double<T>::Erase()
{
DoubleNode<T> *current = head;
while (current)
{
head = head->next;
delete current;
current = head;
}
length = 0;
}
template<class T>
int Double<T>::GetLength()const
{
return length;
}
template<class T>
bool Double<T>::IsEmpty()const
{
return length == 0;
}
template<class T>
bool Double<T>::Find(int k, T& x)const
{
if (length == 0)
{
throw exception("DoubleNode is empty!");
}
else if(k<1 || k>length)
{
throw exception("no find the position of k");
}
DoubleNode<T> *current = head->next;
for (int i=1; (i<k)&¤t; ++i)
{
current = current->next;
}
if (current)
{
x = current->data;
return true;
}
return false;
}
template<class T>
int Double<T>::Search(T& x)const
{
int nIndex = 1;
DoubleNode<T> *current = head->next;
while (current && current->data != x)
{
++nIndex;
current = current->next;
}
if (current)
{
return nIndex;
}
return -1;
}
template<class T>
Double<T>& Double<T>::Delete(int k, T& x)
{
if (length == 0)
{
throw exception("DoubleNode is empty!");
}
else if(k<1 || k>length)
{
throw exception("no find the position of k, so can't delete!");
}
DoubleNode<T> *current = head->next;
for (int i=1; (i<k)&¤t; ++i)
{
current = current->next;
}
DoubleNode<T> * p = current;
current->pre->next = current->next;
current->next->pre = current->pre;
x = p->data;
delete p;
p = NULL;
--length;
return *this;
}
template<class T>
Double<T>& Double<T>::Insert(int k, const T& x)
{
if (k>=0 && k<= length)
{
DoubleNode<T> *newNode = new DoubleNode<T>;
newNode->data = x;
DoubleNode<T> *current = head;
for (int i=0; i<k; ++i)
{
current = current->next;
}
newNode->pre = current;
newNode->next = current->next;
current->next->pre = newNode;
current->next = newNode;
++length;
}
else
{
throw exception("no find the position of k, so can't insert!");
}
return *this;
}
template<class T>
void Double<T>::output(ostream& out)const
{
DoubleNode<T> *current = head->next;
while (current!=end)
{
out << current->data << " ";
current = current->next;
}
}
template<class T>
ostream& operator<< (ostream& out, const Double<T>& x)
{
x.output(out);
return out;
}
template<class T>
void Double<T>::reverse()
{
DoubleNode<T> *p1 = head;
DoubleNode<T> *p2 = NULL;
DoubleNode<T> *pNode;
while (p1 != NULL)
{
pNode = p1;
pNode->pre = p1->next;
p1 = p1->next;
pNode->next = p2;
p2 = pNode;
}
end = head;
head = p2;
}
#endif
浠ヤ笂涓哄弻閾捐〃鐨勫熀鏈搷浣滐紝浠g爜宸茬粡嫻嬭瘯榪囦簡錛屽彲浠ョ洿鎺ョ敤錛?br>鍏朵腑錛宧ead. end鍦ㄦ瀯閫犲嚱鏁版椂錛孨ew浜嗕袱涓璞★紝鏄負(fù)浜咺nsert 鍜?Delete鎿嶄綔鐨勬柟渚匡紒
鏇村ソ鐨勬柟寮忔槸:鎶婃寚閽堝拰鏁版嵁鍒嗗紑錛岃繖鏍穐ead,end灝卞彲浠ヨ妭鐪佸瓨璐┖闂翠簡錛?br>鏂瑰紡濡備笅錛?br>//鎸囬拡鏁版嵁閮ㄥ垎錛堝悗緇寚閽堝拰鍓嶉┍鎸囬拡錛?br>struct Node_base
{
Node_base *next;
Node_base *pre;
};
//娣誨姞瀹為檯鏁版嵁閮ㄥ垎
template <class T>
struct Node : public Node_base
{
T m_data;
};