• [数据结构与算法] : 栈的数组实现


    头文件

     1 typedef int ElementType;
     2 
     3 #ifndef _STACK_AR_
     4 #define _STACK_AR_
     5 
     6 struct StackRecord;
     7 typedef struct StackRecord *Stack;
     8 
     9 int IsEmpty(Stack S);
    10 int IsFull(Stack S);
    11 Stack CreateStack(int MaxElements);
    12 void DisposeStack(Stack S);
    13 void MakeEmpty(Stack S);
    14 void Push(ElementType X, Stack S);
    15 ElementType Top(Stack S);
    16 void Pop(Stack S);
    17 ElementType TopAndPop(Stack S);
    18 
    19 #endif

    源文件

     1 #include "stackar.h"
     2 #include <malloc.h>
     3 #include "fatal.h"
     4 #include <stdlib.h>
     5 
     6 #define EmptyTOS (-1)
     7 #define MinStackSize (5)
     8 
     9 struct StackRecord
    10 {
    11     int Capacity;
    12     int TopOfStack;
    13     ElementType *Array;
    14 };
    15 
    16 int IsEmpty(Stack S)
    17 {
    18     return S->TopOfStack == EmptyTOS;
    19 }
    20 
    21 int IsFull(Stack S)
    22 {
    23     return S->TopOfStack == S->Capacity - 1;
    24 }
    25 
    26 Stack CreateStack(int MaxElements)
    27 {
    28     Stack S;
    29 
    30     if(MaxElements < MinStackSize)
    31         Error("Stack size is to small!");
    32 
    33     S = (Stack)malloc( sizeof(struct StackRecord) );
    34     if( S == NULL )
    35         FatalError("Out of Space!");
    36 
    37     S->Array = (ElementType*)malloc( sizeof(ElementType) * MaxElements );
    38     if(S->Array == NULL)
    39         FatalError("Out of Space!");
    40     S->Capacity = MaxElements;
    41     MakeEmpty(S);
    42 
    43     return S;
    44 }
    45 
    46 void DisposeStack(Stack S)
    47 {
    48     if(S != NULL)
    49     {
    50         free(S->Array);
    51         free(S);
    52     }
    53 }
    54 
    55 void MakeEmpty(Stack S)
    56 {
    57     if(S == NULL)
    58         Error("Create stack first!");
    59     else
    60         S->TopOfStack = EmptyTOS;
    61 }
    62 
    63 void Push(ElementType X, Stack S)
    64 {
    65     if( IsFull(S) )
    66         Error("Full Srack!");
    67     else
    68         S->Array[++S->TopOfStack] = X;
    69 }
    70 
    71 ElementType Top(Stack S)
    72 {
    73     if( IsEmpty(S) )
    74     {
    75         Error("Empty Srack!");
    76         return 0; /* return value used to avoid warning */
    77     }
    78     else
    79         return S->Array[S->TopOfStack];
    80 }
    81 
    82 void Pop(Stack S)
    83 {
    84     if( IsEmpty(S) )
    85         Error("Empty Srack!");
    86     else
    87         --S->TopOfStack;
    88 }
    89 
    90 ElementType TopAndPop(Stack S)
    91 {
    92     if( IsEmpty(S) )
    93     {
    94         Error("Empty Srack!");
    95         return 0; /* return value used to avoid warning */
    96     }
    97     else
    98         return S->Array[S->TopOfStack--];
    99 }

    测试文件

     1 #include <stdio.h>
     2 #include "stackar.h"
     3 
     4 main( )
     5 {
     6     Stack S;
     7     int i;
     8 
     9     S = CreateStack( 12 );
    10     for( i = 0; i < 10; i++ )
    11         Push( i, S );
    12 
    13     while( !IsEmpty( S ) )
    14     {
    15         printf( "%d
    ", Top( S ) );
    16         Pop( S );
    17     }
    18 
    19     DisposeStack( S );
    20     return 0;
    21 }
  • 相关阅读:
    https 数字证书理解
    linux token作用及原理
    C 语言section作用
    https 证书的生成及C语言实现
    linux 如何用udp实现可靠传输
    elementui 局域网引用 样式缺失问题
    helm 安装 EFK ES Xpack认证
    helm 安装 Apollo
    helm 安装 MinIO 集群
    k8s 安装 canal 服务
  • 原文地址:https://www.cnblogs.com/moon1992/p/7500059.html
Copyright © 2020-2023  润新知