#define STACKINIT 100
#define STACKPLUS 10
typedef int Elemtype;
typedef struct{
Elemtype *top;
Elemtype *base;
int stacksize;
}Sqstack;
#include <stdio.h>
#include <stdlib.h>
#include "6.h"
Sqstack Initstack()
{
Sqstack S;
S.base=(Elemtype*)malloc(STACKINIT*sizeof(Elemtype));
S.top=S.base;
S.stacksize=STACKINIT;
return S;
}
void Push(Sqstack *S,Elemtype e)
{
if(S->top-S->base==S->stacksize)
{
S->base=(Elemtype*)realloc(S->base,(S->stacksize+STACKPLUS)*sizeof(Elemtype));
S->stacksize+=STACKPLUS;
}
*S->top++=e;
}
void Stacktraverse(Sqstack S)
{
while(S.top!=S.base)
{
Elemtype d=*--S.top;
printf("%d",d);
}
}
int main(int argc, char *argv[]) {
int n;
Sqstack S=Initstack();
printf("输入一个非负十进制整数:\n");
scanf("%d",&n);
while(n)
Push(&S,n%2);
n=n/2;
Stacktraverse(S);
return 0;
}
注意一下花括号,否则死循环
while(n) {
Push(&S,n%2);
n=n/2;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:可能的原因有:
数组越界:如果你在使用顺序栈时没有检查栈的大小,当你输入的数字超出了栈的大小时,就会导致程序异常终止。可以在代码中添加一些断言语句来检查数组下标是否越界。
操作空栈:当你在输入数字时,如果栈已经为空,你就无法弹出栈顶元素。这时你可以在代码中添加一些判断语句,避免出现该情况。
不合法输入:如果用户输入了无法转换为数字的值,如字符串或字母,那么程序就会出错。可以使用异常处理机制来避免程序崩溃,比如捕获输入数据类型不匹配的异常。
以下是示例代码:
class Stack:
def __init__(self, size):
self.top = -1
self.max_size = size
self.data = [None] * size
def is_empty(self):
return self.top == -1
def is_full(self):
return self.top == self.max_size - 1
def push(self, value):
if self.is_full():
raise Exception('stack is full')
self.top += 1
self.data[self.top] = value
def pop(self):
if self.is_empty():
raise Exception('stack is empty')
value = self.data[self.top]
self.top -= 1
return value
def input_numbers():
stack = Stack(10) # 假设栈大小为10
while True:
try:
n = int(input('请输入一个数字:'))
stack.push(n)
except ValueError:
print('输入不合法,请输入数字')
except Exception as e:
print(str(e))
else:
print('输入成功')
if __name__ == '__main__':
input_numbers()
在上面的示例代码中,我们使用一个Stack
类来实现顺序栈,同时在input_numbers
函数中添加了异常处理机制,可以避免输入数据类型不匹配、栈满、栈空等情况导致的程序崩溃。
在main中遍历函数后加一个输入字符的函数,问题解决