•  1 #include <stdio.h>
     2 #include <string.h>
     3 #include <malloc.h>
     4 #include <stdlib.h>
     5 
     6 #define OVERFLOW 0
     7 #define TRUE true
     8 #define FALSE false
     9 #define OK 1
    10 #define ERROR 0
    11 
    12 #define STACK_INIT_SIZE 10  //存储空间初始分配量
    13 #define STACK_INCREMENT 2   //存储空间分配增量
    14 
    15 typedef int SElemType;
    16 typedef bool Status;
    17 
    18 //栈的顺序存储表示
    19 
    20 typedef struct SqStack{
    21     SElemType *base;    //在栈构造之前和销毁之后,base的值为NULL
    22     SElemType *top;     //栈顶指针
    23     int stacksize;      //当前已分配的存储空间,以元素为单位
    24 }SqStack;   //顺序栈
    25 
    26 //构造一个空栈S
    27 void InitStack(SqStack *S){
    28     (*S).base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
    29     if(!(*S).base){
    30         exit(OVERFLOW);     //存储分配失败
    31     }
    32     (*S).top = (*S).base;
    33     (*S).stacksize = STACK_INIT_SIZE;
    34 }
    35 
    36 //销毁栈S,S不再存在
    37 void DestroyStack(SqStack *S){
    38     free((*S).base);
    39     (*S).base = NULL;
    40     (*S).top = NULL;
    41     (*S).stacksize = 0;
    42 }
    43 
    44 //若栈S为空栈,则返回TRUE,否则返回FALSE
    45 Status StackEmpty(SqStack S){
    46     if(S.top == S.base){
    47         return TRUE;
    48     }
    49     else{
    50         return FALSE;
    51     }
    52 }
    53 
    54 //若栈不为空,则用e返回S的栈顶元素,并返回OK,否则返回ERROR
    55 Status GetTop(SqStack S, SElemType *e){
    56     if(S.top > S.base){
    57         *e = *(S.top - 1);
    58         return OK;
    59     }
    60     else{
    61         return ERROR;
    62     }
    63 }
    64 
    65 //插入元素e为新的栈顶元素
    66 void Push(SqStack *S, SElemType e){
    67     if((*S).top - (*S).base >= (*S).stacksize){     //栈满,增加存储空间
    68         (*S).base - (SElemType *)realloc((*S).base, ((*S).stacksize + STACK_INCREMENT) * sizeof(SElemType));
    69         if(!(*S).base){
    70             exit(OVERFLOW);     //存储空间分配失败
    71         }
    72         (*S).top = (*S).base + (*S).stacksize;
    73         (*S).stacksize += STACK_INCREMENT;
    74     }
    75     *((*S).top)++=e;
    76 }
    77 
    78 //若栈不为空,则删除S的栈顶元素,用e返回其值,并返回OK。否则返回ERROR
    79 Status Pop(SqStack *S, SElemType *e){
    80     if((*S).top == (*S).base){
    81         return ERROR;
    82     }
    83     *e = *--(*S).top;
    84     return OK;
    85 }
    86 
    87 int main(){
    88     return 0;
    89 }
  • 相关阅读:
    layer备忘
    Java中遍历Map对象的4种方法
    为什么Java中1000==1000为false而100==100为true?
    linux系统安装psycopg2
    centos7源码安装mysql5.7
    Azure Sql
    javascript和jQuery动态修改css样式的方法
    Git early EOF index-pack failed 问题
    C# 多线程——SemaphoreSlim的使用
    Docker 可视化
  • 原文地址:https://www.cnblogs.com/angle-qqs/p/4027272.html
Copyright © 2020-2023  润新知