数据结构——堆栈的基本操作

来源:互联网 发布:cf刷枪软件永久 编辑:程序博客网 时间:2024/06/05 06:52

堆栈的实现方式有两种

1.数组为基础实现 —— 顺序堆栈

2.单向链表为基础实现 —— 链式堆栈


一、顺序堆栈


结构体定义

/*    MaxStackSize 堆栈存放最大数    top:栈顶    Tips:        top 等于-1时,堆栈为空,并且始终指向堆栈最上面的元素*/#define MaxStackSize 100typedef int DataType;  //什么类型都可以,暂时定为inttypedef struct {    DataType stack[MaxStackSize];    int top;}SeqStack;

顺序堆栈的初始化

void SeqStackInit(SeqStack *S){    S->top = -1;    //将top指针设为-1,即不指向任何元素,也就是堆栈为空}

入栈操作

/*    返回1:入栈成功       0: 入栈失败*/int SeqStackPush(SeqStack *S, DataType x){    if (S->top == MaxStackSize - 1)  //判断堆栈是否为满    {        printf("堆栈以满");        return 0;    }    else    {        //放入到栈顶        S->stack[S->top++] = x;        return 1;    }}

出栈操作

/*    return 1:success           0: fail     x:带回被Pop元素的值*/int SeqStackPop(SeqStack *S, DataType *x){    if (S->top == -1)    {        printf("堆栈为空");        return 0;    }    else    {        //赋值给x        *x = S->stack[S->top];        //top指向下一个元素        S->top--;        return 1;    }}

还有其他的一些操作

/*    取栈顶元素*/DataType SeqStackGetTop(SeqStack S){    return S.stack[S.top];}/*    初始化堆栈*/void SeqStackInit(SeqStack *S){    S->top = -1;   //也就是将堆栈设为空}/*    判断堆栈是否为空    返回值1:不为空    返回值0:为空*/int SeqStackNotEmpty(SeqStack *S){    if (S->top < 0)    {        return 0;    }    else    {        return 1;    }}
原创粉丝点击