青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Tauruser

Enjoy Every Day
posts - 34, comments - 95, trackbacks - 0, articles - 5
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

算法與數據結構實驗(二)

Posted on 2006-03-22 12:18 Tauruser 閱讀(731) 評論(2)  編輯 收藏 引用 所屬分類: 算法與數據結構

數組空間組織與鏈表空間組織的堆棧實現


為了增強實現的堆棧通用性,用堆棧實現進行模板化。代碼如下:

//////////// //stack.h /////////////// /
////////////////////////////////////////////////

#ifndef?stack_h_
#define ?stack_h_
#include?
< iostream >
using ? namespace ?std;

template?
< class ?T > ? class ?stack
{
public :
????
virtual ? void ?push( const ?T? & x) = 0 ;
????
virtual ? void ?pop() = 0 ;
????
virtual ?T?Top()? const ? = ? 0 ;
????
virtual ? bool ?IsEmpty()? const ? = 0 ;
????
virtual ? bool ?IsFull()? const = 0 ;

}
;

#endif
//////////// segstack.cpp ///////////////
///////// 數組組織代碼 ////////////////////////


#include?
" stack.h "

template?
< class ?T > ? class ?SegStack:? public ?stack < T >
{
public :
????SegStack(
int ?mSize);
????
~ SegStack();
????
bool ?IsEmpty()? const ;
????
bool ?IsFull()? const ;
????
void ?push( const ?T? & x);
????
void ?pop();
????T?Top()?
const ;
????
// friend?ostream&?operator?<<?(ostream&?out,const?SegStack<T>&?seg);
????template? < ? class ?T > ?friend?ostream & ? operator ? << ?(ostream & ? out , const ?SegStack < T >& ?seg);?
????
void ?output(ostream & ? out )? const ;

private :
????T?
* s;
????
int ?maxSize;
????
int ?top;
}
;

template?
< class ?T > ?SegStack < T > ::SegStack( int ?mSize):top( - 1 )
{
????maxSize
= mSize;
????s?
= ? new ?T[maxSize];

}

template?
< class ?T > ?SegStack < T > :: ~ SegStack()
{
????delete?[]s;
}


template?
< class ?T > ? bool ?SegStack < T > ::IsFull()? const
{????????
????
return ?(top == (maxSize - 1 ));
}


template?
< class ?T > ? bool ?SegStack < T > ::IsEmpty()? const
{
????
return ?(top ==- 1 );
}


template?
< class ?T > ? void ?SegStack < T > ::push( const ?T? & x)
{
????
if (IsFull())
????
{
????????cout
<< " The?stack?is?full " << endl;
????}
else
????
{
????????s[
++ top] = x;
????}

}


template?
< class ?T > ? void ?SegStack < T > ::pop()
{
????
if (IsEmpty())
????
{
????????cout
<< " The?stack?is?empty " << endl;
????}
else ????
????
{
????????top
-- ;
????}

}

template?
< class ?T > ?T?SegStack < T > ::Top()? const
{
????
return ?s[top];
}


template?
< class ?T > ? void ?SegStack < T > ::output(ostream & ? out )? const
{
????
out << " The?stack?list?is: " ;
????
for ( int ?i( 0 );i <= top;i ++ )
????????
out << " ? " << s[i];
????
// out<<endl;
}


template?
< class ?T > ?ostream & ? operator ? << ?(ostream & ? out , const ?SegStack < T >& ?seg)
{
????
out << " The?stack?list?is: " ;
????
for ( int ?i( 0 );i <= seg.top;i ++ )
????????
out << " ? " << seg.s[i];
????
// out<<endl;
????
// seg.output(out);
???? return ? out ;
}
/////////////// linkstack.cpp ////////////
//////////// //鏈表實現 ///////////////////// //

#include? " stack.h "

template?
< class ?T1 > ? struct ?Element
{
????T1?content;
????Element
* ?next;
}
;
template?
< class ?T1 > ? class ?LinkStack:? public ?stack < T1 >
{
public :
????LinkStack();
????
~ LinkStack();
????
bool ?IsEmpty()? const ;
????
bool ?IsFull()? const ;
????
void ?push( const ?T1? & x);
????
void ?pop();
????T1?Top()?
const ;
????template?
< class ?T > ?friend?ostream & ? operator << (ostream & ? out ,? const ?LinkStack < T1 >& ?linkstack);
????
void ?output(ostream & ? out )? const ;

private :

????Element
< T1 >* ?top;
}
;
template?
< class ?T1 > ? bool ?LinkStack < T1 > ::IsEmpty()? const
{
????
if (top == NULL)
????????
return ? true ;
????
else
????????
return ? false ;
}

template?
< class ?T1 > ? bool ?LinkStack < T1 > ::IsFull()? const
{
????
return ? false ;
}

template?
< class ?T1 > ?LinkStack < T1 > ::LinkStack():top(NULL)
{
}

template?
< class ?T1 > ?LinkStack < T1 > :: ~ LinkStack()
{
????
while (top != NULL)
????
{
????????Element
< T1 >* ?temp;
????????temp
= top;
????????top
= top -> next;
????????delete?temp;
????}

}


template?
< class ?T1 > ? void ?LinkStack < T1 > ::push( const ?T1? & x)
{
????Element
< T1 >* ?temp = new ?Element < T1 > ;
????temp
-> content = x;
????temp
-> next = top;
????top
= temp;
}

template?
< class ?T1 > ? void ?LinkStack < T1 > ::pop()
{
????
if (top != NULL)
????
{
????????Element
< T1 >* ?temp;
????????temp
= top;
????????top
= top -> next;
????????delete?temp;
????}

????
}


template?
< class ?T1 > ?T1?LinkStack < T1 > ::Top()? const
{
????
return ?top -> content;
????
}

template?
< class ?T1 > ?ostream & ? operator << (ostream & ? out ,? const ?LinkStack < T1 >& ?linkstack)
{
????Element
< T1 >* ?temp;
????temp
= linkstack.top;

????
out << " The?stack?list?is: " ;
????
while (temp != NULL)
????
{
????????
out << temp -> content << ' ? ' ;
????????temp
= temp -> next;
????}


????
return ? out ;
}

template?
< class ?T1 > ? void ?LinkStack < T1 > ::output(ostream & ? out )? const
{
????Element
< T1 >* ?temp;
????temp
= top;

????
out << " The?stack?list?is: " ;
????
while (temp != NULL)
????
{
????????
out << temp -> content << ' ? ' ;
????????temp
= temp -> next;
????}

}

沒有寫注釋,有空再補上吧。

Feedback

# re: 算法與數據結構實驗(二)  回復  更多評論   

2006-03-22 17:33 by 任我行
template < class T > class stack
{
public :
virtual void push( const T & x) = 0 ;
virtual void pop() = 0 ; // 這樣子void 類型有些不妥吧。

# re: 算法與數據結構實驗(二)  回復  更多評論   

2006-03-22 18:15 by Tauruser
嗯,你認為應該如何呢?
我知道有些stack結構直接用pop(),彈出并返回棧頂,但這個模板類已經有一個Top()函數可以做到這個,將pop()返回值設為void有什么不妥呢?
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品在线| 亚洲欧美一区二区激情| 欧美日韩国产影片| 久久亚洲精品一区二区| 久久综合久久综合久久综合| 久久久亚洲欧洲日产国码αv | 国产精品永久免费观看| 国产精品久久久久久一区二区三区 | 久久综合99re88久久爱| 免费成人黄色| 欧美日韩精品免费观看视频| 欧美日精品一区视频| 国产精品夜夜夜一区二区三区尤| 国产亚洲一区在线| 136国产福利精品导航| 日韩视频一区二区三区| 亚洲自拍高清| 久久久久久91香蕉国产| 亚洲国产精品va在线看黑人动漫| 亚洲国产成人久久综合| 亚洲一卡久久| 另类成人小视频在线| 欧美日韩直播| 精品成人久久| 亚洲午夜精品一区二区三区他趣| 久久精品主播| 最新69国产成人精品视频免费| 亚洲免费视频一区二区| 欧美福利视频在线| 国产主播一区二区三区| 亚洲一区区二区| 欧美a级在线| 亚洲在线一区二区| 欧美精品尤物在线| 亚洲高清视频在线| 欧美在线视频一区二区三区| 亚洲日本无吗高清不卡| 久久久久久自在自线| 国产精品入口| 中国成人在线视频| 亚洲欧洲精品天堂一级| 午夜精品久久久久久99热软件| 另类尿喷潮videofree | 亚洲精品一区二区三区婷婷月 | 亚洲乱码国产乱码精品精可以看| 欧美一区二区三区精品电影| 欧美日韩国产精品专区| 91久久精品网| 噜噜噜91成人网| 午夜一区二区三视频在线观看| 欧美黄色一区| 亚洲人成网站在线播| 久热这里只精品99re8久| 午夜视频在线观看一区二区三区 | 久久久免费观看视频| 国产日韩精品在线观看| 亚洲字幕在线观看| 日韩视频在线观看| 欧美极品在线播放| 亚洲乱码精品一二三四区日韩在线| 另类欧美日韩国产在线| 香港久久久电影| 国产麻豆精品在线观看| 欧美亚洲视频一区二区| 亚洲午夜日本在线观看| 国产精品国产三级国产aⅴ无密码| 日韩亚洲一区二区| 亚洲精品永久免费| 国产精品福利片| 欧美亚洲免费电影| 久久激情五月婷婷| 亚洲激情电影在线| 亚洲人成亚洲人成在线观看图片| 欧美日韩国语| 欧美一区二区三区四区在线观看| 亚洲综合欧美| 国产亚洲欧美一区| 久久色中文字幕| 嫩草伊人久久精品少妇av杨幂| 亚洲乱码国产乱码精品精天堂 | 国产主播精品在线| 欧美韩日一区| 欧美三级特黄| 久久久国产精品亚洲一区 | 国产无一区二区| 蜜臀久久99精品久久久画质超高清| 久久一区精品| 制服丝袜激情欧洲亚洲| 亚洲日本电影在线| 亚洲一区二区三区乱码aⅴ| 欧美成人有码| 中文网丁香综合网| 香蕉国产精品偷在线观看不卡| 国产亚洲一区在线播放| 欧美激情无毛| 国产精品乱子久久久久| 久久综合久久久久88| 亚洲激情一区二区三区| 欧美色图首页| 久久综合伊人77777蜜臀| 欧美日本精品| 久久久精彩视频| 欧美人与性动交a欧美精品| 亚洲欧美一区二区三区久久| 久久国产精品久久w女人spa| 亚洲精品欧美日韩专区| 欧美一区午夜精品| 亚洲作爱视频| 久久午夜影视| 先锋资源久久| 欧美日本精品| 亚洲第一综合天堂另类专| 国产精品区二区三区日本 | 亚洲私拍自拍| 另类亚洲自拍| 欧美在线一区二区| 欧美日韩国产成人在线91| 久久婷婷久久一区二区三区| 欧美日韩亚洲在线| 欧美激情视频在线免费观看 欧美视频免费一 | 国产精品激情电影| 亚洲国产精品久久久久秋霞不卡| 国产日韩欧美中文| 亚洲一区二区三区精品视频| 亚洲另类视频| 久久久国产精品一区二区中文 | 亚洲日本va午夜在线影院| 欧美日韩理论| 欧美国产一区在线| 国产在线乱码一区二区三区| 亚洲视频在线观看免费| 亚洲精品一区二区三区樱花| 欧美一区二区三区视频免费| 午夜精品久久久久| 国产精品久久久久永久免费观看| 亚洲精品影视在线观看| 一本大道久久a久久综合婷婷| 欧美承认网站| 亚洲三级视频| 夜夜嗨av一区二区三区免费区| 免费人成精品欧美精品| 欧美sm视频| 久久久久久免费| 欧美成人乱码一区二区三区| 亚洲精品在线三区| 国产午夜精品在线| 中文一区二区| 亚洲欧美激情在线视频| 欧美精品色网| 玖玖玖免费嫩草在线影院一区| 国产无一区二区| 久久精品国产免费| 六月丁香综合| 亚洲高清免费视频| 欧美日韩国产页| 一区二区三区四区五区精品视频| 亚洲一区二区日本| 国产精品日韩在线观看| 亚洲欧美韩国| 蜜桃av一区二区在线观看| 亚洲第一精品福利| 欧美成在线观看| 日韩午夜电影| 久久国产免费看| 亚洲国内精品在线| 欧美视频在线免费| 欧美不卡视频一区发布| 国产一区日韩一区| 久久精品国产视频| 亚洲大胆女人| 一本色道久久综合狠狠躁篇的优点 | 久久岛国电影| 在线观看视频日韩| 欧美精品一区二区在线观看| 亚洲男女自偷自拍| 欧美激情a∨在线视频播放| 中文网丁香综合网| 黄色亚洲免费| 欧美日韩视频专区在线播放| 欧美一区二区三区另类| 美女黄毛**国产精品啪啪| 欧美激情女人20p| 美女脱光内衣内裤视频久久影院| 在线成人小视频| 欧美日本簧片| 性视频1819p久久| 亚洲国产成人av| 久久精品盗摄| 99热精品在线| 在线欧美日韩国产| 国产精品亚洲成人| 欧美高清在线一区| 久久国产精品免费一区| 99成人免费视频| 欧美xxx成人| 久久精品女人天堂| 亚洲一区二区在线免费观看视频| 在线精品一区二区| 国产一区二区视频在线观看| 欧美小视频在线|