我的数据结构代码中有错误,我不知道我的代码有什么问题吗?

时间:2018-09-27 18:59:57

标签: c

今天我已经了解了c中的数据结构和堆栈,我写了一个代码来反转一个字符串,但这给了我错误我不知道我的代码有什么问题,这里是我的代码,请帮助我找到错误

#include <stdlib.h>
#include <stdio.h>

#define MAXSTACK 50
typedef char StackEntryType;
typedef enum{false, true}Boolean;

typedef struct{
         int top;
         StackEntryType entry[MAXSTACK];
}stack;

//I have used this code to create a stack,

void CreateStack(stack *S){
          S->top = -1;
}

//This the code to check whether the stack is Empty or not,

   Boolean IsStackEmpty(const stack *S){
             return (S->top==-1);
}

//This is the code to check whether the stack is Full or not,

Boolean IsStackFull(const stack *S){
         return (S->top==MAXSTACK-1);
}

//This code I have used to push an element from the stack,

void push(StackEntryType item, stack *S){
       if(IsStackFull(S)){
               printf("Stack is full\n");
       }else{
               S->entry[++S->top] = item;
       }
}

//This is the code to pop an element from stack,

void pop(StackEntryType *item, stack *S){
        if(IsStackEmpty(S)){
                printf("Stack is Empty\n");
        }else{
               *item = S->entry[S->top--];
        }
}

//This is the main function of my code,

void main()
{
    stack S;
    int i;
    char c;

    char Str[] = "This is an example using stack";

    CreateStack(&S);
    printf("\nThe String is : \n%s", Str);

    for(i=0; Str[i]!='\0'; i++){
        if(!IsStackFull(&S)){
            push(Str[i], &S);
        }
    }

        printf("\nThe string for the stack : \n");

        while(!IsStackEmpty(&S)){
            pop(&c, &S);
            putchar(c);
        }
        printf("\nThe String is : \n%s", Str);
}

让我知道我的代码出了什么问题。

2 个答案:

答案 0 :(得分:2)

您正在使用void main()-我建议您切换到某些标准的编译器gccclang

错误::我可以看到您现在将str[i]!=\o替换为\0很好。除此之外,您缺少}来标记poppush函数的结尾。完成此操作后,您的程序将正常运行并反转字符串打印- kcats gnisu elpmaxe na si sihT

答案 1 :(得分:1)

如果您期望Str包含反向字符串,则应将其放在此处。以此替换您的while循环(假定Str长度小于堆栈大小)。

for(i = 0 ; !IsStackEmpty(&S) ; i++){
        pop(&c, &S);
        Str[i] = c;
}