|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 wueuwu 于 2020-6-4 19:43 编辑
int Push(SqStack &S, char e) {
//printf("输入字符:");
if(scanf("%c", &e) != EOF){
while ((e = getchar()) != '\n' && e != EOF);}
//e = getchar();
if (S.top - S.base >= S.stacksize) {
S.base = (char*)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(char));
if (!S.base) exit(1);
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return OK;
}
、、、、、、、、、、、、、、、、
本帖最后由 我叫MD 于 2020-6-4 22:10 编辑
我给你改下代码 5分钟 稍等
我给你改了下代码,能用了,Push函数我相当于在你的逻辑上面重写了一下,所以重点是Push函数,我加了很多注释,你应该能看懂
首先,给你的栈初始化
- void Stack() {
- int n;
- SqStack S;
- //这里其实就加了这么一行
- memset(&S, 0, sizeof(SqStack));
- do {
- printf("\n");
- printf("****************栈的基本操作及应用*****************\n");
- printf("* 1 进栈 *\n");
- printf("* 2 出栈 *\n");
- printf("* 3 取栈顶元素 *\n");
- printf("* 4 应用 *\n");
- printf("* 5 退出 *\n");
- printf("***************************************************\n");
- printf("请选择:");
- scanf_s("%d", &n);
- switch (n) {
- case 1:
- Push(S); break;
- case 2:
- Pop(S); break;
- case 3:
- GetTop(S); break;
- case 4:
- printf("--------应用-------"); break;
- case 5:break;
- default:
- printf("ERROR!"); break;
- }
- } while (n != 5);
- }
复制代码
Push函数,这个是你主要看的
- int Push(SqStack &S)
- {
- //变量赋初值
- char e = '\0';
- //获取输入的字符,如果为换行,则重新获取
- while ((e = getchar()) == '\n')
- {
- }
- //如果还没有申请空间,则申请空间
- if (S.base == NULL || S.top == NULL)
- {
- //先申请 STACKINCREMENT 空间
- S.base = (char*)calloc(sizeof(char), STACKINCREMENT);
- if (S.base == NULL)
- {
- printf("空间申请失败\n");
- exit(1);
- }
- //栈顶和栈底指向同一个位置
- S.top = S.base;
- //保存目前栈的大小
- S.stacksize = STACKINCREMENT;
- }
- else
- {
- //如果栈满,则申请更大的空间,将原先的数据保存
- if (S.top - S.base >= S.stacksize)
- {
- //将栈底指向新申请的空间
- S.base = (char*)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(char));
- //恢复栈顶
- S.top = S.base + S.stacksize;
- //更新栈的大小
- S.stacksize += STACKINCREMENT;
- }
- }
- *S.top = e;
- S.top++;
- return OK;
- }
复制代码
Pop函数,给你加了个判断,要不然当你栈空的时候,再弹数据,会出问题
int Pop(SqStack &S)
{
//这里加了个判断,以后这种小问题的注意
if (S.top == S.base)
{
printf("栈中没有数据\r\n");
return OK;
}
char e;
e = *--S.top;
printf("出栈:%c", e);
return OK;
}
好了,以上就是我修改的地方,你根据函数名,找到对应位置,改一下,应该差不多了
|
|