首页 > 其他分享 >C:堆栈(轮子)

C:堆栈(轮子)

时间:2023-02-28 14:23:42浏览次数:36  
标签:return sqstack int ElemType top 轮子 base 堆栈

/*
    栈的特性:先进后出。
    栈在计算语言处理和将递归算法改为非递归算法等方面起着非常重要的作用。
*/

#define INITSIZE 100 //储存空间的初始分配量
typedef int ElemType;
typedef struct
{
    int top;           //栈顶指针
    ElemType *base;    //存放元素的动态数组空间
    int stacksize;     //当前栈空间的大小
}sqstack;

//初始化操作
//创建一个空栈,栈顶指针top初始化为0
void initstack(sqstack *S)
{
    s->base = (ElemType *)malloc(INITSIZE * sizeof(ElemType));    //申请存储空间
    s->top = 0;             //栈顶指针初始值为0
    s->stacksize = INITSIZE;       //容量为初始值
}

//求栈长操作
int getlen(sqstack *S)
{
    return (S->top);
}

//取栈顶元素操作
//将栈顶元素值存入e指向的内存单位,top值不变
int gettop(sqstack *S,ElemType *e)
{
    if(S->top==0) return 0;      //栈空,返回0
    *e = S->base[S->top-1];      //栈顶元素值存入指针e所指向的内存单元
    return 1;
}

//压栈操作
//将入栈元素x存入top所指的位置上,然后栈顶指针top增1
int push(sqstack *S,ElemType x)
{
    if(S->top == S->stacksize)  //若栈满,增加一个存储单元
    {
        S->base = (ElemType *)realloc(S->base,(S->stacksize+1)*sizeof(ElemType));
        if(!S->base) return 0;
        S->stacksize++;
    }
    S->base[S->top++] = x;
    return 1;
}

//弹栈操作
//先将栈顶指针top减1,再将top单元中的元素存入指针e所指向的内存单元
int pop(sqstack *S,ElemType *e)
{
    if(S->top==0)return 0;
    *e = S->base[--S->top];
    return 1;
}

//判栈S是否为空
int emptystack(sqstack *S)
{
    if(S->top==0) return 1;
    else return 0;
}

//输出栈操作
void list(sqstack *S)
{
    int i;
    for(i=S->top-1;i>=0;i--)
    {
        printf("%4d",S->base[i]);
    }
    printf("\n");
}

 

标签:return,sqstack,int,ElemType,top,轮子,base,堆栈
From: https://www.cnblogs.com/xwtstudio/p/17164091.html

相关文章

  • idea 设置 堆栈大小后重启失败的问题
    现象:随着开发的项目越来越大,idea也会越来越卡,把idea的堆栈设置大后,重启idea,竟然idea重启不起来了。idea版本:  根本原因:idea设置的堆栈大小,启动的时候,超过了java......
  • ZOJ 1004 Anagrams by Stack(dfs堆栈)
    AnagramsbyStackTimeLimit:2Seconds     MemoryLimit:65536KBHowcananagramsresultfromsequencesofstackoperations?Therearetwosequenc......
  • 逆向 —— 堆栈图(二)
    函数:计算机的函数,是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能的同时还带有一入口和一个出口,所谓的入口,就是函数所带的各个参数,我们可以通过这个入......
  • 逆向 —— 堆栈图(一)
    1、如何找到画堆栈图的地址  步骤一:在DTDEBUG中用F3快捷键打开HelloWorld.exe程序步骤二:Ctrl+G快捷键 弹出下面的窗口,在窗口中输入一个地址: 步骤三:在上面的......
  • 堆栈图
    堆栈图:ctrl+g:跳转到输入的目标地址F2:选中地址后按F2,设置断点F8:单步调试,会跳过Call指令(单步步过)F7:单步调试,不会跳过Call指令(单步步入)堆栈图分析步骤:第一步:观察寄存器(ESP、......
  • 【快应用】快应用赋值时出现堆栈溢出
    ​ 现象描述将通过$element('id')获取到内容,赋值给成员变量,引发堆栈溢出(RangeError:Maximumcallstacksizeexceeded),从而导致程序的崩溃。页面成员变量stateText发......
  • 计算的轮子
    //加法constintmaxn=520;inta[maxn],b[maxn],c[maxn];intmain(){stringA,B;cin>>A>>B;intlen=max(A.length(),B.length());for(inti......
  • 【CCCC】L3-002 特殊堆栈 (30分),nlogn维护序列中位数,STL大乱斗,有重multiset,vector+二
    problemL3-002特殊堆栈(30分)堆栈是一种经典的后进先出的线性结构,相关的操作主要有“入栈”(在堆栈顶插入一个元素)和“出栈”(将栈顶元素返回并从堆栈中删除)。本题要求你实......
  • 【原创】在 VBScript 中使用堆栈(Stack)
    堆栈(简称为栈)是一种先入后出(FirstIn,LastOut)的数据结构。环境要求WindowsXP及以上。Windows10、Windows11在Windows功能中勾选.NETFramework3.5(包括......
  • (转)go语言-golang基础-queue队列和stack堆栈
    原文:https://www.cnblogs.com/malukang/p/12708850.html1.queue队列队列(queue),是一种FIFO(FirstInFirstOut)先进先出的线性表。通常用数据或者链表来实现队列。队......