• 栈的数组实现


      1 /*
      2   栈的数组实现
      3 */
      4 
      5 /*接口头文件*/
      6 
      7 typedef int ElementType;
      8 #ifndef _STACK_H
      9 #define _STACK_H
     10 #include <stdbool.h>
     11 struct StackRecord;
     12 typedef struct StackRecord * Stack;
     13 
     14 /*操作集*/
     15 bool IsEmpty( Stack S );
     16 bool IsFull( Stack S );
     17 Stack CreateStack( int MaxElements );
     18 void MakeEmpty( Stack S );
     19 void Push( ElementType X, Stack S );
     20 void Pop( Stack S );
     21 ElementType Top( Stack S );
     22 void DisposeStack( Stack S );
     23 void PrintfStack( Stack S );
     24 
     25 #endif
     26 
     27 
     28 /*接口实现*/
     29 #include <stdio.h>
     30 #include <stdlib.h>
     31 #include "stack.h"
     32 
     33 #define EMPTYTOS ( -1 )        //空栈标志 
     34 #define MinStackSize ( 5 )     //指定栈的最小空间
     35 
     36 /*特定结构体定义*/
     37 struct StackRecord
     38 {
     39     int Capacity;   //栈空间大小
     40     int TopOfStack; //栈顶。当其值为0,则栈为空
     41     ElementType * Array; //存储数据 
     42 };
     43 
     44 /*由MaxElements指定栈的大小*/ 
     45 Stack CreateStack( int MaxElements )
     46 {
     47     Stack S;
     48     
     49     if ( MaxElements < MinStackSize )
     50     {
     51        printf( "Stack is smallr
    " );
     52        exit( 1 );
     53     }
     54     S = ( Stack )malloc( sizeof( struct StackRecord ) );
     55     if ( S == NULL )
     56     {
     57        printf( "No Space!!!
    " );
     58        exit( 1 );
     59     }
     60     S->Array = ( ElementType )malloc( sizeof( ElementType ) * MaxElements );
     61     if ( S->Array == NULL )
     62     {
     63        printf( "No Space!!!
    " );
     64        exit( 1 );
     65     }
     66     S->Capacity = MaxElements;
     67     MakeEmpty( S );
     68     
     69     return S;
     70 }
     71 
     72 void MakeEmpty( Stack S )
     73 {
     74     S->TopOfStack = EMPTYTOS;
     75 }
     76 
     77 bool IsEmpty( Stack S )
     78 {
     79     return S->TopOfStack == EMPTYTOS;
     80 }
     81 
     82 bool IsFull( Stack S )
     83 {
     84     return S->TopOfStack == S->Capacity - 1;
     85 }
     86 
     87 void Push( ElementType X, Stack S )
     88 {
     89     if ( IsFull( S ) )
     90     {
     91        printf( "Stack is full
    " );
     92        exit( 1 );
     93     }
     94     else
     95         S->Array[ ++S->TopOfStack ] = X;
     96 }
     97 
     98 void Pop( Stack S )
     99 {
    100     if ( IsEmpty( S ) )
    101     {
    102        printf( "Stack is empty
    " );
    103        exit( 1 );
    104     }
    105     else
    106         S->TopOfStack--;
    107 }
    108 
    109 ElementType Top( Stack S )
    110 {
    111     if ( IsEmpty( S ) )
    112     {
    113        printf( "Stack is empty
    " );
    114        exit( 1 );
    115     }
    116     else
    117         return S->Array[ S->TopOfStack ];
    118 }
    119 
    120 void DisposeStack( Stack S )
    121 {
    122     free( S->Array );
    123     free( S );
    124 }
    125 
    126 void PrintfStack( Stack S )
    127 {
    128     if ( IsEmpty( S ) )
    129        printf( "No Data
    " );
    130     else
    131         for ( int i = S->TopOfStack; i >=0; i-- )
    132             printf( "%3d", S->Array[ i ] );
    133             
    134     printf( "
    " );
    135 } 
  • 相关阅读:
    2019学期第十周编程总结
    2019学期第九周编程总结
    第七次作业
    第六次作业
    第五次作业
    jsp第四次作业
    3.10
    3.4
    3.3jsp作业
    最后一次安卓作业
  • 原文地址:https://www.cnblogs.com/weixia-blog/p/7307411.html
Copyright © 2020-2023  润新知