顺序栈的实现

/*
顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放
自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序表中的位置。

做法: 以 top=0 表示空栈,另外设指针 base 指示栈底元素在顺序栈中的位置。
当 top 与 base 的值相等时,表示空栈。

*/


#include<stdio.h>
#include<stdlib.h>

//-----------顺序栈的存储结构------------

#define MAXSIZE 4    //顺序栈存储空间的初始分配量

typedef struct 
{
    int* top;       //栈顶指针
    int* base;      //栈底指针
    int size;       //栈可用的最大空间
}SqStack;



//-------------初始化顺序栈------------

//为顺序栈分配一个预定大小的数组空间

/*
        步骤:
        1、分配一个数组,使 base 指向这段空间的基地址,即为栈底
        2、将栈顶指针 top 初始化为 base ,表示为空栈。
*/
SqStack* Init_Stack(SqStack* p)
{
    //构造一个空栈
    p->base=(int*)malloc(MAXSIZE*sizeof(int));//为顺序栈动态分配最大容量为MAXSIZE的数组空间
    p->top=p->base;//空栈
    
    p->size=MAXSIZE;
    return p;
}



//---------------顺序栈的入栈------------

/*
        步骤:
        1、判断栈是否满,如果满返回
        2、将新的元素压入栈顶,栈顶的指针加 1 。
*/
int Insert_stack(SqStack* p,int data)//插入元素为新的栈顶元素
{
    if((p->top)-(p->base)==(p->size)) //栈顶减去栈底等于顺序栈的最大容量,栈已经满了
    {
        return 0;
    }
    *p->top++=data;
    return 1;
}


//---------------顺序栈的出栈----------

/*
        步骤:
        1、判断栈是否为空,如果为空,则退出
        2、栈顶的指针减1,出栈
*/
int* Delete_stack(SqStack* p,int* q) //用一个指针保存出栈的数
{
    if((p->base)==(p->top))     //空栈
    {
        return 0;
    }
    q=(--p->top);
    return q;
}


//-------------顺序栈的取栈底元素-------

/*
        返回栈顶指针的值,栈顶指针不表
*/
int Get_stack(SqStack* p)
{
    if(p->top!=p->base)        //不是空栈
    {
        return *(p->top-1);
    }
}



int main()
{
    SqStack L;  //一个栈
    SqStack* p; //一个指向栈的指针
    return 0;
}
posted @   风恬月淡时  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示