1主要功能内容:写程序实现栈的初始化,置空,入栈,出栈及输出栈内数据的函数,并调试。
注意:函数类型与调用方式一致。
提示:编写五个操作的函数,然后在主函数内对其进行调用。
Linkstack Init_stack()//初始化栈
int Empty_stack(Linkstack top)//判断空栈
Linkstack Push_stack(Linkstack top,int x)//元素入栈
Linkstack Pop_stack(Linkstack top,int *x)//元素出栈
void Pri_stack(Linkstack top)//输出栈中元素
2.2、栈的应用。
在第1题调试正确的基础上,写一个函数实现数据转换。
如:十进制数108,转换为八进制数为154,即(108)10=(154)8
提示:
void Conver(int n,int d) //进制转换(除以基数、取余、倒序)
{//用循环辗转相除,将余数入栈
//将栈内的数输出
}
你这是堆栈,怎么会跑出来next。为啥到DispList函数时,画风一变,整成链表的输出代码了呢???
EmptyStack函数里,判断栈为空,应该用if (S->top == -1) ,因为你初始化的时候,把top初始化为了-1
代码已修改,运行结果如下:
代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define MAXLEN 100
typedef int DataType;
typedef struct
{
DataType data[MAXLEN];
int top;
}SeqStack;
void InitStack(SeqStack* S) {
/*初始化栈*/
S->top = -1;
}
int EmptyStack(SeqStack *S) {
/*判断栈是否为空*/
if (S->top == -1)
return 1;
else
return 0;
}
int FullStack(SeqStack* S) {
/*判断栈满*/
if (S->top == MAXLEN - 1)
return 1;
else
return 0;
}
int Push(SeqStack* S, DataType x) {
/*进栈操作函数*/
if (FullStack(S)) {
printf("栈满,不能进栈!");
return 0;
}
else {
S->top++;
S->data[S->top] = x;
return 1;
}
}
int Pop(SeqStack* S, DataType* x) {
/*出栈操作*/
if (EmptyStack(S)) {
printf("栈空,不能出栈!");
return 0;
}
else {
*x = S->data[S->top];
S->top--;
return 1;
}
}
int GetTop(SeqStack* S, DataType* x) {
/*获取栈顶元素*/
if (EmptyStack(S)) {
printf("栈空,不能出栈!");
return 0;
}
else {
*x = S->data[S->top];
return 1;
}
}
void DispList(SeqStack *S) {
for (int i = S->top; i >= 0; i--) {
printf("%d", S->data[i]);
}
printf("\n");
}
void Conver(int n, int d) {
//将n的各位数字放入队列
int t;
SeqStack S;
InitStack(&S);
while (n != 0) {
t = n % d;
Push(&S, t);
n /= d;
}
//输出
DispList(&S);
}
int main()
{
int n, d;
printf("请输入需要转换的10进制数和目标进制:");
scanf("%d %d", &n, &d);
Conver(n, d);
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!