#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