Cách cài đặt stack có sử dụng template trong ngôn ngữ c++

 

#include <iostream>

using

namespace

std

;

 

template

<

class

T

>

class

Stack

{

private

:

    

int

Size

;

    

int

Top

;

    

T

*

Data

;

public

:

    

Stack

(

int

=

10

)

;

    

~

Stack

(

)

;

    

bool

Push

(

const

T

&);

    

bool

Pop

(

T

&);

    

bool

isEmpty

(

)

const

;

    

bool

isFull

(

)

const

;

}

;

 

template

<

class

T

>

Stack

<

T

>

:

:

Stack

(

int

n

)

{

    

if

(

n

>

0

&& n < 1000)

        Size = n;

    

else

        

Size

=

10

;

    

Top

=

1

;

    

Data

=

new

T

[

Size

]

;

}

 

template

<

class

T

>

Stack

<

T

>

:

:

~

Stack

(

)

{

    

delete

[

]

Data

;

}

 

template

<

class

T

>

bool

Stack

<

T

>

:

:

Push

(

const

T

& Item) {

    if (!isFull()) {

        Top++ ;

        

Data

[

Top

]

=

Item

;

        

/*Đã thêm được vào Stack*/

        

return

true

;

    

}

    

return

false

;

}

 

template

<

class

T

>

bool

Stack

<

T

>

:

:

Pop

(

T

& Item) {

    if (!isEmpty()) {

        Item = Data[Top];

        

Top

;

        

return

true

;

    

}

    

return

false

;

}

 

template

<

class

T

>

bool

Stack

<

T

>

:

:

isEmpty

(

)

const

{

    

if

(

Top

==

1

)

        

return

true

;

    

return

false

;

}

 

template

<

class

T

>

bool

Stack

<

T

>

:

:

isFull

(

)

const

{

    

if

(

Top

==

Size

)

        

return

true

;

    

return

false

;

}

 

int

main

(

)

{

    

/*Khai báo Stack có 100 phần tử*/

    

Stack

<

int

>

a

(

100

)

;

    

/*Push 7 phần tử vào Stack*/

    

a

.

Push

(

1

)

;

    

a

.

Push

(

2

)

;

    

a

.

Push

(

3

)

;

    

a

.

Push

(

4

)

;

    

a

.

Push

(

5

)

;

    

a

.

Push

(

6

)

;

    

a

.

Push

(

7

)

;

    

int

data

;

    

/*In tất cả các phần tử trong Stack ra màn hình*/

    

while

(

a

.

Pop

(

data

)

)

{

        

cout

<

<

data

<

<

endl

;

    

}

}