//这是在sqtack.h 中实现的 #define INITISIZE 100 typedef int ElemType; typedef struct {
ElemType* base; int top; int stacksize; }sqtack; //创建一个空栈
//分配存储空间,将栈顶指针初始化为0,栈空间的大小为初始分配量 void Initstack(sqtack* S) { S->base =
(ElemType*)malloc(INITISIZE * sizeof(ElemType));//申请存储空间 S->top = 0;//栈顶指针初始化为0
S->stacksize = INITISIZE;//栈容量为初始值 } void list(sqtack* S)//输出栈 { int i = 0;
while (i < S->top) { printf("%4d", S->base[i]); i++; } printf("\n"); } int
Push(sqtack* S, ElemType x)//压栈 //将值为x的数据元素插入栈S,使之成为新的栈顶元素
//若栈满,则增加占容量。先将x存入S->top所指的内存单元,然后将栈顶指针S->top增1 { if (S->top =
S->stacksize)//若栈满,增加一个存储单元 { S->base = (ElemType*)realloc(S->base,
(S->stacksize + 1) * sizeof(ElemType)); if (!S->base) return 0;//空间分配不成功,返回0
S->stacksize++; } S->base[S->top++] = x;//插入元素后,栈顶指针后移 return 1; } int
pop(sqtack* S, ElemType* e)//弹栈 //取出栈S 的栈顶元素值,同时栈顶指针-1
//若栈不为空,则先将栈顶指针S->top-1,然后将S->top单元的元素值存入指定的内存单元 { if (S->top == 0) return
0;//栈空,返回0 *e = S->base[--S->top];//先将栈顶指针减1.再取顶元素 return 1;//弹栈成功,返回1; } int
getlen(sqtack* S)//求栈长 { return (S->top); } int gettop(sqtack* S, ElemType*
e)//取出栈中元素 { if (S->top == 0)//栈空 return 0; *e = S->base[S->top - 1]; return 1;
} int emptystack(sqtack* S)//判断空栈 { return (S->top == 0 ? 1 : 0); }
//这是在sqtack.c中实现的 #include"sqtack.h" void convert(int m,int n) { int x;
//定义栈并且初始化 sqtack s; initstack(&s); while (m!=0) { push(&s, m % n);//余数入栈 m = m
/ n;//更新被除数 } while (!emptystack(&s))//栈不空 { pop(&s,&x); //弹栈 //输出弹出的余数
printf("%d", x); } } int main() { int m, n; printf("请输入一个正整数:"); scanf("%d",
&m); printf("请输入一个进制数:"); scanf("%d", &n); convert(m, n); }
以上两段代码是在栈中实现,下面是一段C语言实现的代码
int main() { int m, n; printf("请输入一个正整数;"); scanf("%d", &m);
printf("请输入一个进制数"); scanf("%d", &n); int arr[100];//存余数,并作为数组以便输出 int cnt =
0;数组下标 while(m!=0) { arr[cnt++] = m % n; m = m / n; } //输出 for (int i = cnt-1;
i >=0; i--) { printf("%d", arr[i]); } return 0; }
本质上在实现这段代码时方法是一样的,但是栈更加麻烦一些

技术
今日推荐
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信