c++的数据结构关于代码的问题

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) //进制转换(除以基数、取余、倒序)
{//用循环辗转相除,将余数入栈
//将栈内的数输出

img

img

img

img

img

img

img

img

img

你这是堆栈,怎么会跑出来next。为啥到DispList函数时,画风一变,整成链表的输出代码了呢???

EmptyStack函数里,判断栈为空,应该用if (S->top == -1) ,因为你初始化的时候,把top初始化为了-1
代码已修改,运行结果如下:

img

代码:

#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;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632