• 《栈的基本操作》


    /*
    对栈的一些基本操作:
    1,栈的创建。 CreatStack(SqStack &s)
    2,压栈操作。 Push(SqStack &s,SElemType &e)
    3,得到栈顶的元素。 GetTop(SqStack s,SElemType &e)
    4,出栈操作。(若栈不为空,则删除栈顶元素,并用e2返回其值) Pop(SqStack &s,SElemType &e)
    5,计算栈的长度。 StackLength(SqStack s)
    6,清空一个栈。 ClearStack(SqStack &s)
    7,销毁一个栈。 DestroyStack(SqStack &s)
    8,依次输出栈低到栈顶的元素。PrintSatck(SqStack s)
    */
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>

    #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 //存储空间分配增量
    typedef int Status; //函数类型
    typedef int SElemType; //数据元素类型

    typedef struct
    {
    SElemType *top;
    SElemType *base;
    SElemType stacksize;
    }SqStack;

    //栈的创建
    Status CreatStack(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;
    }

    //压栈操作
    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;
    s.top++;
    return OK;
    }

    //得到栈顶的元素
    Status GetTop(SqStack s,SElemType &e)
    {
    if(s.top == s.base)
    return ERROR;
    e = *(s.top - 1);
    return e;
    }

    //出栈操作
    Status Pop(SqStack &s,SElemType &e)
    {
    if(s.top == s.base)
    return ERROR;
    --s.top;
    e = *s.top;
    return e;
    }

    //计算栈的长度
    Status StackLength(SqStack s)
    {
    return (s.top - s.base);
    }

    //清空一个栈
    Status ClearStack(SqStack &s)
    {
    s.top = s.base;
    return OK;
    }

    //销毁一个栈
    Status DestroyStack(SqStack &s)
    {
    int i,len;
    len = s.stacksize;
    for(i=0;i<len;i++)
    {
    free(s.base);
    s.base++;
    }
    s.top = s.base = NULL;
    s.stacksize = 0;
    return OK;
    }

    //依次输出栈低到栈顶元素
    void PrintSatck(SqStack s)
    {}

    //主函数
    int main()
    {
    SqStack s;
    int e;

    //调用CreatStack函数,创建一个空栈
    CreatStack(s);
    printf("栈已创建好! ");

    //调用Push函数,进行压栈操作
    printf("请输入要压入栈的数据: ");
    scanf("%d",&e);
    while(e!=9999)
    {
    Push(s,e);
    printf("input data ending(9999) ");
    scanf("%d",&e);
    }
    printf("栈的长度为:%d",StackLength(s));
    printf(" ");

    //调用GetTop函数
    printf("栈顶的元素是:%d",GetTop(s,e));
    printf(" ");

    //调用Pop函数,删除栈顶的元素
    printf("删除的栈顶的元素是:%d",Pop(s,e));
    printf(" ");

    //调用StackLength函数,计算栈的长度
    printf("栈的长度为:%d",StackLength(s));
    printf(" ");

    //调用ClearStack函数,清空一个栈
    ClearStack(s);
    printf("栈已清空 ");

    //调用DestroyStack函数,销毁一个栈
    //DestroyStack(s);
    //printf("栈已销毁 ");

    //调用PrintStack函数依次输出栈低到栈顶的元素
    //PrintStack(s);
    //printf(" ");

    return 0;

    }

  • 相关阅读:
    ElementUI 之 Message,自动弹出,信息不显示问题
    eslint 对下一行不要校验报错
    <input type="file"> accept属性筛选文件类型
    纯 css 控制隔行变色
    本地启动服务,两个进程分别监听两个端口,导致两个 URL 不同
    tap 事件会触发两次问题
    时间宝贵-----
    有些人,得到和失去,你都会后悔!
    前调清新,中调醇厚,后调悠长。
    office 格式定义
  • 原文地址:https://www.cnblogs.com/sun-/p/4847080.html
Copyright © 2020-2023  润新知