?~~ 2016-10-11 11:57 采纳率: 75%
浏览 1377
已采纳

c语言程序 ———栈的实现

#include
#include
#define STACK_INIT_SIZE 10
#define STACKINCREMENT 2
struct Stack
{
char base;
char *top;
int stacksize;
};
struct Stack *InitStack(struct Stack *S) //创建空栈
{
S->base=(char *)malloc(STACK_INIT_SIZE * sizeof(char));
if(!S->base) {printf("error!"); return 0;}
S->top=S->base;
S->stacksize=STACK_INIT_SIZE ;
return S;
}
struct Stack *Push(struct Stack *S,char e) //向栈中插入元素
{
if(S->top-S->base==S->stacksize)
{
S->base=(char *)realloc(S->base,(S->stacksize+STACKINCREMENT * sizeof(char)));
if(!S->base) {printf("分配空间失败"); return 0;}
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT;
}
*(S->top)=e;
S->top++;
return S;
}
void Pop(struct Stack *S,char e) //删除栈顶元素,并且返回其值
{
if(S->top==S->base) {printf("栈为空,无法删除栈顶元素"); return 0;}
e=
(--S->top);
printf("删除的栈顶元素为:");
printf("%c\n",e);
}
int main()
{
struct Stack *S;
int e;
char i;
S=(struct Stack *)malloc(STACK_INIT_SIZE * sizeof(char));
if( !S->base) printf("error!");
InitStack(S);
printf("输入要插入的元素e:");
scanf("%c",&e);
Push(S,&e);
Pop(S,&i);
return 0;

}

以上是我写的c语言程序,运行的时候不管输入什么,输出的都是x,求哪位大神讲解下为什么,实在是百思不得其解

  • 写回答

2条回答 默认 最新

  • threenewbee 2016-10-11 12:04
    关注

    你的代码都不能编译

     #include<stdio.h>
    #include<stdlib.h>
    #define STACK_INIT_SIZE 10
    #define STACKINCREMENT 2
    struct  Stack
    {
        char *base;
        char *top;
        int stacksize;
    };
    struct  Stack *InitStack(struct Stack *S)         //创建空栈
    {
        S->base=(char *)malloc(STACK_INIT_SIZE * sizeof(char));
        if(!S->base)  {printf("error!");  return 0;}
        S->top=S->base;
        S->stacksize=STACK_INIT_SIZE ;
        return S;
    }
    struct Stack *Push(struct Stack *S,char e)       //向栈中插入元素
    {
        if(S->top-S->base==S->stacksize)
        {
            S->base=(char *)realloc(S->base,(S->stacksize+STACKINCREMENT * sizeof(char)));
            if(!S->base) {printf("分配空间失败"); return 0;}
            S->top=S->base+S->stacksize;
            S->stacksize+=STACKINCREMENT;
        }
        *(S->top)=e;
        S->top++;
        return S;
    }
    void Pop(struct Stack *S,char e)      //删除栈顶元素,并且返回其值
    {
        if(S->top==S->base)  {printf("栈为空,无法删除栈顶元素"); return; } //void函数不能return 0;
        e=*(--S->top);
        printf("删除的栈顶元素为:");
        printf("%c\n",e);
    }
    int main()
    {
        struct Stack *S;
        char e; // 不能是int
        char i;
        S=(struct Stack *)malloc(STACK_INIT_SIZE * sizeof(char));
        if( !S->base) printf("error!");
        InitStack(S);
        printf("输入要插入的元素e:");
        scanf("%c",&e);
        Push(S,e); //函数里要求char,这里不能取地址
        Pop(S,i); // 同上
        return 0;
    
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥20 白日门传奇少一个启动区服和启动服务器的快捷键,东西都是全的 , 他们说套一个出来就行了 但我就是弄不好,谁看看,
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题