首页 > 其他分享 >顺序栈的实现

顺序栈的实现

时间:2023-07-22 15:33:14浏览次数:32  
标签:顺序 实现 top 栈顶 int base 指针

/*
顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放
自栈底到栈顶的数据元素,同时附设指针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;
}

标签:顺序,实现,top,栈顶,int,base,指针
From: https://www.cnblogs.com/lzzcforever/p/17573452.html

相关文章

  • SpringCloud-Nacos配置中心实现原理(转)
    原文:https://blog.csdn.net/Zong_0915/article/details/113089265作者:Zong_0915 一.NacosConfig实现原理解析首先,NacosConfig针对配置的管理提供了4种操作):获取配置,从NacosConfigServer中读取配置。监听配置:订阅感兴趣的配置,当配置发生变化的时候可以收到一个事件。发布......
  • 记录实现复制EXCEL数据到前端表单
     背景是用户需要把原本在Excel上填报的数据搬运到线上系统进行填报,在做了一个带输入框的表格之后用户提出希望能够实现将EXCEL上的数据复制黏贴到这个表格里的功能。 实现功能的整体思路是在input框上监听黏贴事件,获取到复制的数据。由于在Excel中\t表示换格,\n表示换行,所以......
  • 利用for循环实现乘法表、三角形
    publicclassChengfademo{publicChengfademo(){}publicstaticvoidmain(String[]args){for(inti=1;i<=9;++i){for(intj=1;j<=i;++j){System.out.print(i+"*"+j+"......
  • 1.C++入门&&简单顺序结构-习题
    1.C++入门&&简单顺序结构1.计算(a+b)*c的值 inta,b,c; cin>>a>>b>>c; cout<<(a+b)*c;2.带余除法 inta,b; cin>>a>>b; cout<<a/b<<""<<a%b; //C++中取余结果正负只与%前面的数有关系 cout<<5%2<<endl......
  • C# 实现抓取财经网站页面内容的实例方法
    ​ protectedvoidEnter_Click(objectsender,EventArgse)        {            WebClientwe=newWebClient();  //主要使用WebClient类            byte[]myDataBuffer;            myDataBuffer=we.DownloadData......
  • 模拟ArrayList(顺序表)的底层实现
    模拟ArrayLIst的底层实现packagecom.tedu.api04.list;importjava.util.Objects;/***@authorLIGENSEN*Date:2023/7/2011:35*/publicclassArrayListDemo{publicstaticvoidmain(String[]args){ArrList<String>list=newArrList<>......
  • c#实现一元二次方程求解器示例分享
    ​ c#实现一元二次方程求解器示例,需要的朋友可以参考下usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceWindowsFo......
  • Android实现沉浸式状态栏功能
    Android中实现沉浸式状态栏的功能,供大家参考,具体内容如下1.先上效果图,实现沉浸式状态栏有两种方式,一种是通过写Theme主题的方式,另一种是写代码的方式。若要使多个页面出现沉浸式状态栏,则使用主题的方式更方便,如果只要使单个页面出现,则使用代码方式更好!当然了,看个人喜好而去。......
  • element-ui表格实现表头快速筛选
        filterChange(obj){console.log('obj',obj)constkeys=Object.keys(obj)constvalues=Object.values(obj)console.log('keys',keys)console.log('values',values)letpltKeys=......
  • 实现chrome谷歌浏览器多开(独立环境 独立cookie)
    由于各种各样的原因,你可能需要在一个电脑登录某个平台,比如一个电脑登录3个公众号,或者3个知乎等等。最简单的方案是,直接安装3个不同的浏览器,比如一个谷歌浏览器,一个火狐浏览器,一个Edge浏览器。这个方案也能解决,但如果想多开10个呢?安装10个不同的浏览器也能解决,但感觉这样比较......