为什么这个栈空间扩展容量之后会出现这样的问题?

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

#define initsize 5
#define len 2
 
typedef int Elemtype;

typedef struct
{
    int bot[2],top[2];
    Elemtype *V;
    int m;                //栈最大可容纳元素个数 
}Dblstack;

int initstack(Dblstack &s)
{
    Elemtype *arr = (Elemtype *)malloc(sizeof(Elemtype) * initsize);
    
    s.V = arr;                //arr是临时指针变量
    s.m = initsize;
    
    s.bot[0] = 0;
    s.bot[0] = s.m - 1;
    
    s.top[0] = 0;
    s.top[1] = s.m - 1;
}

int stackEmty(Dblstack s)
{
    if(s.bot[0] == s.top[0] && s.bot[1] == s.top[1])//栈顶和栈底在同一位置时,栈空 
        return 0;
    return 1;
}

int stackFull(Dblstack s)
{
    //左右两栈的栈顶在中间相遇,或左栈顶位置超出初始化空间最右侧,或右栈位置超出初始化空间最左侧 
    if(s.top[0] > s.m - 1 || s.top[1] < 0 || s.top[1] - s.top[0] <= -1)
        return 1;
    return 0;
}

void extendcapacity(Dblstack &s)
{
    /*Elemtype *new_arr = (Elemtype *)malloc(sizeof(Elemtype) * (s.m + len));
    int new_size = s.m + len;
    int i,j;
    
    for(i = s.bot[0];i<s.top[0];i++)
    {
        new_arr[i] = s.V[i];
    }
    int n = s.bot[1] - s.top[1];
    for(j = new_size - 1,i = s.m - 1;j>new_size -1 - n;j--,i--)
    {
        new_arr[j] = s.V[i];
    }
    s.bot[1] = new_size - 1;
    s.top[1] = s.bot[1] - n;
    s.m = new_size;            //这一步只能放在这个位置,不能往前放 
    
    Elemtype *old_arr = s.V;
    s.V = new_arr;            //此处就可以充分体现中间变量new_arr的作用,充当一个中间变量 
    free(old_arr);*/
    Elemtype *new_arr = (Elemtype *)realloc(s.V,sizeof(Elemtype) * len);
    int new_size = s.m + len;
    int i,j;
    int n = s.bot[1] - s.top[1];
    for(j = new_size - 1,i = s.m - 1;j>new_size - 1 - n;j--,i--)
    {
        new_arr[j] = s.V[i];
    }
     
    s.bot[1] = new_size - 1;
    s.top[1] = s.bot[1] - n;
    s.m = new_size;
    s.V = new_arr;
}

int pushLeft(Dblstack &s,Elemtype e)
{
    if(stackFull(s) == 1)
    {
        extendcapacity(s);
    }
    
    s.V[s.top[0]] = e;
    s.top[0]++;
    return 0;
}

int pushRight(Dblstack &s,Elemtype e)
{
    if(stackFull(s) == 1)
    {
        extendcapacity(s);
    }
    s.V[s.top[1]] = e;
    s.top[1]--;
    return 0;
}

int popLeft(Dblstack &s)
{
    if(stackEmty(s) == 0)
    {
        exit(0);
    }
    
    Elemtype e = s.V[s.top[0]];
    s.top[0]--;
    return e;
}

int popRight(Dblstack &s)
{
    if(stackEmty(s) == 0)
    {
        exit(0);
    }
    Elemtype e = s.V[s.top[1]];
    s.top[1]++;
    return e;
}

int printDblstack(Dblstack s)
{
    for(int i=0;i<s.m;i++)
    {
        printf("|%d|\t",s.V[i]);
    }
    printf("\n");
}

int main()
{
    Dblstack s;
    initstack(s);
    printf("入栈操作前栈内数据情况:\n\n");
    printDblstack(s);
    
    pushLeft(s,1);
    pushLeft(s,2);
    pushLeft(s,100);
    
    pushRight(s,4);
    pushRight(s,3);
    printf("入栈完毕之后栈内的数据情况:\n\n");
    printDblstack(s);
    
    pushRight(s,101);
    pushRight(s,102);
    printf("栈扩容之后栈内数据存放情况:\n");
    printDblstack(s);
    return 0;
}

 

出现什么情况呢?把问题描述一下。

入栈操作前栈内数据情况: |2054640| |0| |2031952| |0| |1413563472| 入栈完毕之后栈内的数据情况: |1| |2| |100| |3| |4| 栈扩容之后栈内数据存放情况: |1| |2| |100| |3| |4| |977485121| |72398533|

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y

C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html