Xây dựng lớp stack cho ngăn xếp kiểu int

  1. #include <stdio.h>

  2. #include <conio.h>

  3. #include <memory.h>

  4. #include <malloc.h>

  5. #include <time.h>

  6.  

  7.  

  8. class Stack

  9. {

  10. public

    :

  11.     Stack

    (

    void

    )

    ;

  12.     Stack

    (

    int

    size

    )

    ;

  13.     virtual ~Stack

    (

    void

    )

    ;

  14.    

    int

    Push

    (

    int

    number

    )

    ;

  15.    

    int

    Pop

    (

    int

    &

    number

    )

    ;

  16.    

    int

    SetSize

    (

    const

    int

    size

    )

    ;

  17.    

    void

    Clear

    (

    )

    ;

  18.    

    int

    GetNumberElement

    (

    )

    const

    ;

  19.  

  20. private

    :

  21.     Stack

    &

    operator

    =

    (

    const

    Stack

    &

    stack

    )

    ;

  22.     Stack

    (

    const

    Stack

    &

    stack

    )

    ;

  23.  

  24.    

    int

        m_index

    ;

  25.    

    int

        m_size

    ;

  26.    

    int

    *

       m_data

    ;

  27. }

    ;

  28.  

  29.  

  30. Stack

    ::

    Stack

    (

    void

    )

  31. {

  32.     m_size

    =

    0

    ;

  33.     m_data

    =

    0

    ;

  34.     m_index

    =

    1

    ;

  35. }

  36.  

  37. Stack

    ::

    Stack

    (

    int

    size

    )

  38. {

  39.    

    if

    (

    size

    >

    0

    )

  40.    

    {

  41.         m_size

    =

    size

    ;

  42. =

    (

    int

    *

    )

    malloc

    (

    size

    *

    sizeof

    (

    int

    )

    )

    ;

    m_datasize

  43. memset

    (

    m_data

    ,

    0

    ,

    size

    *

    sizeof

    (

    int

    )

    )

    ;

    m_datasize

  44.    

    }

  45.    

    else

  46.    

    {

  47.         m_size

    =

    0

    ;

  48.         m_data

    =

    0

    ;

  49.    

    }

  50.     m_index

    =

    1

    ;

  51. }

  52. Stack

    ::

    ~Stack

    (

    void

    )

  53. {

  54.     Clear

    (

    )

    ;

  55. }

  56.  

  57. int

    Stack

    ::

    SetSize

    (

    const

    int

    size

    )

  58. {

  59.    

    if

    (

    size

    >

    0

    )

  60.    

    {

  61.        

    if

    (

    m_data

    )

  62.        

    {

  63.             m_data

    =

    0

    ;

  64.        

    }

     

  65.         m_index

    =

    1

    ;

  66.         m_size

    =

    size

    ;

  67. =

    (

    int

    *

    )

    malloc

    (

    size

    *

    sizeof

    (

    int

    )

    )

    ;

    m_datasize

  68. memset

    (

    m_data

    ,

    0

    ,

    size

    *

    sizeof

    (

    int

    )

    )

    ;

    m_datasize

  69.    

    }

  70.    

    return

    0

    ;

  71. }

  72.  

  73. int

    Stack

    ::

    Push

    (

    int

    number

    )

  74. {

  75.    

    if

    (

    m_index

    <

    m_size

    )

  76.    

    {

  77.         m_data

    [

    ++

    m_index

    ]

    =

    number

    ;

  78.        

    return

    1

    ;

  79.    

    }

  80.    

    return

    0

    ;

  81. }

  82. int

    Stack

    ::

    Pop

    (

    int

    &

    number

    )

  83. {

  84.    

    if

    (

    m_index

    >=

    0

    )

  85.    

    {

  86.         number

    =

    m_data

    [

    m_index

    ]

    ;

  87.        

    return

    true

    ;

  88.    

    }

     

  89.    

    return

    false

    ;

  90. }

  91.  

  92. void

    Stack

    ::

    Clear

    (

    )

  93. {

  94.    

    if

    (

    m_data

    )

  95.  

    {

  96.         m_data

    =

    0

    ;

  97.    

    }

  98.     m_size

    =

    0

    ;

  99.     m_index

    =

    1

    ;

  100. }

  101.  

  102. int

    Stack

    ::

    GetNumberElement

    (

    )

    const

  103. {

  104.    

    return

    m_index

    +

    1

    ;

  105. }

  106.  

  107. int

    main

    (

    int

    argc

    ,

    char

    *

    argv

    [

    ]

    )

  108. {

         

  109.    

    int

    number

    ;

  110. scanf

    (

    “%d”

    ,

    &

    number

    )

    ;

    number

  111.        

    int

    k

    =

    number

    ;

  112.     Stack my_stack

    (

    200

    )

    ;

  113.    

    while

    (

    number

    )

  114.    

    {

  115.         my_stack.

    Push

    (

    number

    %

    2

    )

    ;

  116.         number

    /=

    2

    ;

  117.    

    }

  118. printf

    (

    \n

    Convert to binary:

    \n

    )

    ;

  119. printf

    (

    “%d(10) = “

    ,

    k

    )

    ;

  120.    

    while

    (

    my_stack.

    GetNumberElement

    (

    )

    )

  121.    

    {

  122.        

    int

    number

    ;

  123.         my_stack.

    Pop

    (

    number

    )

    ;

  124. printf

    (

    “%d”

    ,

    number

    )

    ;

    number

  125.    

    }

  126.     getch

    (

    )

    ;

  127.    

    return

    0

    ;

  128. }