zoukankan      html  css  js  c++  java
  • 《栈的基本操作》

    /*
    对栈的一些基本操作:
    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;

    }

  • 相关阅读:
    软件工程第三次作业-需求分析-第八组(秃头特工队)
    软工第一次作业
    《机器学习》第一次作业——第一至三章学习记录和心得
    软工第一次作业
    《机器学习》第一次作业——第一至三章学习记录和心得
    20201116 新小组 2019南京icpc重现 总结(3小时)
    软工第一次作业
    网络流
    软工实践个人总结
    2020软工实践第二次结对作业
  • 原文地址:https://www.cnblogs.com/sun-/p/4847080.html
Copyright © 2011-2022 走看看