zoukankan      html  css  js  c++  java
  • 栈的数组实现

      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 } 
  • 相关阅读:
    phpcms后台进入地址(包含No permission resources错误)
    phpmyadmin上传大sql文件办法
    ubuntu彻底卸载mysql
    Hdoj 2602.Bone Collector 题解
    一篇看懂词向量
    Hdoj 1905.Pseudoprime numbers 题解
    The Python Challenge 谜题全解(持续更新)
    Hdoj 2289.Cup 题解
    Hdoj 2899.Strange fuction 题解
    Hdoj 2199.Can you solve this equation? 题解
  • 原文地址:https://www.cnblogs.com/weixia-blog/p/7307411.html
Copyright © 2011-2022 走看看