• 数据结构--顺序栈


    /*
    * 构造一个顺序栈(当输入9999时,结束入栈操作),输出栈中元素,显示栈顶元素,删除栈顶元素 
    */
    #include <stdio.h>
    #include <stack>
    #include <stdlib.h>
    #define STACK_INIT_SIZE 100
    #define OK 1
    #define ERROR 0
    typedef int SElemType;
    //顺序栈结构体 
    struct SqStack
    {
        int *base;//指向栈底的指针
        int *top;//指向栈顶元素下一个位置的指针
        int stacksize;//栈的大小
    }; 
    //1.初始化顺序栈
    int InitStrack(SqStack &S){
        S.base = new SElemType[STACK_INIT_SIZE];//为顺序栈动态分配内存 
        if(!S.base){                            //分配失败 
            exit(1);                            //退出程序,参数0表示正常退出,非0表示异常退出 
        }
        S.top = S.base;                         //top初始为base,表示空栈 
        S.stacksize = STACK_INIT_SIZE;          //栈的最大容量 
        return OK;
    } 
    //2.入栈
    int Push(SqStack &S,SElemType e){
        if(S.top - S.base == S.stacksize){      //表示栈满,增加空间 
            int *newbase;                       //指针用于指向新生成的空间位置 
            newbase=new int[S.stacksize*2];     //重新开辟一个空间 
            if(newbase==0) 
                return 0;                       //内存分配失败,返回0 
            for (int i=0;i<=S.stacksize-1;i++)
            {                                   //将原有栈中的元素拷贝到新栈中 
                newbase[i]=S.base[i];
            }       
            delete S.base;                      //删除原有栈的空间 
            S.base=newbase;                     //原有栈的栈底指针指向新栈空间 
            S.top=&S.base[S.stacksize];         //新栈栈顶元素的下一个位置 
            S.stacksize *=2;
        }
        //*S.top++ = e;                         //元素压入栈中,指针S.top加加 
        *S.top=e;
        S.top++;
        return OK; 
    } 
    //3.出栈
    int Pop(SqStack &S){
        if(S.top == S.base){
            printf("空栈!"); 
            return ERROR;
        }
        --S.top;
        return OK; 
    } 
    //4.取栈顶元素
    SElemType GetTop(SqStack S){
        if(S.top != S.base){
            return *(S.top - 1);
        }
        return 00;
    }  
    //5.打印,输出 
    void Print(SqStack S)
    {//打印栈中元素,顺序是从栈底到栈顶
        int *p=S.base;
        while (p<S.top)
        {
            printf("%d  ",*p);
            p++;
        }
        printf("
    ");
    }
    //主函数
    int main(void){
        SqStack S;
        int x,y;
        InitStrack(S);
        printf("Enter Numbers:
    ");
        while(true){
            scanf("%d",&x);
            if(x == 9999){
                break;
            }
            Push(S,x);              //构造顺序栈 
        } 
        printf("The stack elems:");
        Print(S);
        printf("1.入栈:");
        scanf("%d",&x);
        Push(S,x);
        printf("The stack elems:");
        Print(S); 
        y = GetTop(S);
        printf("2.取得栈顶元素:%d
    ",y);
        printf("3.出栈:
    ");
        Pop(S);
        printf("The stack elems:");
        Print(S);
    
    }
  • 相关阅读:
    组合模式
    MySQL8.0 下载安装启动(Windows10)
    OI如逆旅,我亦是行人——省选
    闲话—江湖痴情浅,信步余生。平剑红烛,青丝微绾,却话奁中。
    此时彼方
    CSP 2019游记 & 退役记
    西狂 杨过
    SDOI 2019 Round1 游记
    NOIP2018游记
    未来可期,不知所终
  • 原文地址:https://www.cnblogs.com/tengpengfei/p/10454028.html
Copyright © 2020-2023  润新知