zoukankan      html  css  js  c++  java
  • 栈的顺序存储表示

    #define    TRUE    1
    #define    FALSE    0
    #define    OK        1
    #define    ERROR    0
    #define    INFEASIBLE    -1
    #define    OVERFLOW    -2
    
    
    #define STACK_INIT_SIZE    100    //存储空间初始分配量
    #define STACKINCREMENT    10        //存储空间分配增量
    
    //Status是函数的类型,其值是函数结果状态代码
    typedef int Status;
    typedef int SElemType;
    
    
    #include "malloc.h"
    
    typedef struct{
        SElemType    *base;        //在栈构造之前和销毁之后,base的值为NULL
        SElemType    *top;        //栈顶指针
        int stacksize;            //当前已分配的存储空间,以元素为单位
    }SqStack;
    
    //-------基本操作的函数原型说明-------------
    Status InitStack(SqStack &S);
    //构造一个空栈S
    
    Status DestroyStack(SqStack &S);
    //销毁栈S,S不再存在
    
    Status ClearStack(SqStack &S);
    //把S置为空栈
    
    Status StackEmpty(SqStack S);
    //若栈S为空栈,则返回TRUE,否则返回FALSE
    
    int StackLength(SqStack S);
    //返回S的元素个数,即栈的长度
    
    Status GetTop(SqStack S,SElemType &e);
    //若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
    
    Status Push(SqStack &S,SElemType e);
    //插入元素e为新的栈顶元素
    
    Status Pop(SqStack &S,SElemType &e);
    //若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
    
    Status StackTraverse(SqStack S,Status (*visit)());
    //从栈底到栈顶依次对栈中的每个元素调用函数visit()。一旦visit()失败,则操作失败
    
    Status InitStack(SqStack &S){
        S.base=(SElemType * )malloc(STACK_INIT_SIZE * sizeof(SElemType));
        if(!S.base)    exit(OVERFLOW);
        S.top=S.base;
        S.stacksize=STACK_INIT_SIZE;
        return OK;
    }//InitStack
    
    Status GetTop(SqStack S,SElemType &e){
        if(S.top==S.base)    return ERROR;
        e=*(S.top-1);
        return OK;
    }//GetTop
    
    Status Push(SqStack &S,SElemType e){
        if(S.top-S.base>=S.stacksize){    //栈满,追加存储空间
            S.base=(SElemType * )realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
            if(!S.base)    exit(OVERFLOW);    //存储分配失败
            S.top=S.base+S.stacksize;
            S.stacksize+=STACKINCREMENT;
        }
        *S.top++=e;
        return OK;
    }//Push
    
    Status Pop(SqStack &S,SElemType &e){
        if(S.top==S.base)    return ERROR;
        e=*--S.top;
        return OK;
    }//Pop
    
    Status StackEmpty(SqStack S){
        if(S.top==S.base)    return TRUE;
        return FALSE;
    }//StackEmpty
    #include "stdafx.h"
    #include "stdlib.h"
    #include "stdio.h"
    #include "SqStack.h"
    
    void conversion(){
        SqStack S;
        SElemType e;
        int N;
        InitStack(S);
        scanf("%d",&N);
        while(N){
            Push(S,N%8);
            N=N/8;
        }
        while(!StackEmpty(S)){
            Pop(S,e);
            printf("%d",e);
        }
    }
    
    int main(int argc, char* argv[])
    {
        conversion();
        return 0;
    }
  • 相关阅读:
    javascript之全局函数
    讲真,MySQL索引优化看这篇文章就够了
    aws亚马逊磁盘扩展卷步骤
    google支付回调验证(备用)
    Linux TCP状态TIME_WAIT 过多的处理
    MySQL索引优化分析
    CSS使图片变模糊,亲测非常好用
    linux ss 命令用法说明
    php一行代码获取本周一,本周日,上周一,上周日,本月一日,本月最后一日,上月一日,上月最后一日日期
    有哪些你追了很多女生才明白的道理?
  • 原文地址:https://www.cnblogs.com/13yan/p/3422402.html
Copyright © 2011-2022 走看看