⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sqstack.h

📁 本文件是实现栈结构的头文件
💻 H
字号:
/* 此文件为实现栈的头文件 */
#define STACK_INIT_SIZE 100;  /*存储空间初始分配量*/
#define STACKINCREMENT 10;  /*存储空间分配增量*/
#define MaxStackSize 100
#define OVERFLOW -1
#define ERROR -2
#define OK 1
#define NULL 0
typedef int SStatus;
typedef char SElemType;
typedef struct  {
    SElemType *base;  /*在栈构造之前和销毁之后,base的值为NULL*/
    SElemType *top;    /*栈顶指针*/
    int stacksize; /*当前已分配的存储空间,以元素为单位*/
    }SqStack;


/*基本操作函数原型说明*/
/*Status InitStack(SqStack &S);  构造一个空栈 */
/*Status DestroyStack(SqStack &S); 销毁栈s,s不再存在 */
/*Status ClearStack(SqStack &S); 把s设置为空栈 */
/*Status StackEmpty(SqStack S); 若栈s为空,则返回true,否则返回false */
/*Status StackLength(SqStack S); 返回元素的个数,即栈的长度 */
/*Status GetTop(SqStack S,int &e); 若栈不为空,则用e返回栈顶元素,并返回ok,否则返回error */
/*Status Push(SqStack &S,int e); 插入元素e为新的栈顶元素 */
/*Status Pop(SqStack &S,int &e); 若栈不为空,则删除s色栈顶元素,用e返回其值,并返回ok,否则返回error */
/*Status StackTraverse(SqStack S,int(*visit)()); 从栈底到栈顶依次对栈中的每个元素调用函数visit(),一旦visit()失败,操作失败 */

/* 基本操作的算法描述 */
SStatus InitStack(SqStack *S)
{
    S->base=(SElemType *)malloc(100 * sizeof(SElemType));
    if(!S->base)exit(OVERFLOW); /* 存储分配失败 */
    S->top=S->base;
    S->stacksize=STACK_INIT_SIZE;
    return OK;
}
SStatus GetTop(SqStack *S,SElemType *e)
{
    if(S->top==S->base) return ERROR;
    *e=*(S->top-1);
    return OK;
}
SStatus Push(SqStack *S,SElemType e)
{
    if(S->top-S->base>=S->stacksize)  /* 栈满,追加存储空间 */
    {
        S->base=(SElemType *)realloc(S->base,(S->stacksize+10)*sizeof(SElemType));
        if(!S->base) exit(OVERFLOW);  /* 存储分配失败 */
        S->top=S->base+S->stacksize;
        S->stacksize+=STACKINCREMENT;
     }
     *S->top++=e;
     return OK;
}
SStatus Pop(SqStack *S,SElemType *e)
{
    if(S->top==S->base) return ERROR;
    *e=*--S->top;
    return OK;
}
SStatus StackEmpty(SqStack *S)
{
    if(S->top==S->base)
    return OK;
    else
    return  NULL;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -