马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
struct IOStack
{
//栈的结构体定义
std::string *base; //底部指针
std::string *top; //顶部指针
int StackSize; //栈容量
};
void InitStack(IOStack *s, int a)
{
//初始化栈
s->base = new std::string[a]; //申请空间
if (!((s->base) == 0))
{
return;
}
s->top = s->base; //顶底同址
s->StackSize = a; //栈大小
}
void Push(IOStack *s, std::string *e)
{
//入栈操作
*(s->top) = *e;
(s->top)++;
if ((s->top) >= (s->base + s->StackSize)) //如果空间不够了,就需要重新申请更大的空间
{
IOStack ss; //申请一个新的栈结构
InitStack(&ss, 2 * (s->StackSize)); //调用栈的初始化函数
for (int i = 0; i < s->StackSize; i++) //将原来栈中的值依次赋值给新的栈
{
*(ss.base + i) = *(s->base + i);
}
delete[](s->base); //注意,我在这里将原来的栈删除了
s->base = ss.base; //请问:我这里的操作对么?还能不能将SS的地址赋值给S->base?
s->top = s->base + s->StackSize;
s->StackSize = 2 * s->StackSize;
}
}
|