| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1791 人关注过本帖
标题:链栈的简单操作 求解 为什么运行不出结果
只看楼主 加入收藏
堃周
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-4-6
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:7 
链栈的简单操作 求解 为什么运行不出结果
#include <stdio.h>
#include <stdlib.h>
typedef int StackElemType;
typedef struct node
{
    StackElemType data;
    struct node *next;
}LinkStackNode;
typedef LinkStackNode *LinkStack;
void InitLinkStack(LinkStack top);
void Push(LinkStack top,StackElemType x);
int Pop(LinkStack top);
int main()
{
    LinkStack top;
    InitLinkStack(top);
    int i;
    for(i=0;i<10;i++)
        Push(top,i*10);
    for(i=0;i<10;i++)
        printf("%d",Pop(top));   
            
    return 0;
}
void InitLinkStack(LinkStack top)
{
    top=(LinkStack)malloc(sizeof(LinkStack));
    top->next=NULL;
}
void Push(LinkStack top,StackElemType x)
{
    LinkStackNode *p;
    p=(LinkStackNode*)malloc(sizeof(LinkStackNode));
    p->data=x;
    p->next=top->next;
    top->next=p;
}
int Pop(LinkStack top)
{
    if(top->next=NULL)
    {
        printf("表为空\n");
        return 0;
    }
    int a;
    LinkStackNode *temp;
    temp=top->next;
    top->next=temp->next;
    a=temp->data;
    free(temp);
    return a;
}   
搜索更多相关主题的帖子: 操作 int next void top 
2018-04-20 22:31
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
这个程序应该是自己弄的吧~

具体原因就是top的值没有返回到主函数~

void InitLinkStack(LinkStack top)
{
    top=(LinkStack)malloc(sizeof(LinkStack));
    top->next=NULL;
}

这里把函数类型改改

void InitLinkStack(LinkStack* top)
{
    if (top!=NULL)
    {
        *top=(LinkStack)malloc(sizeof(LinkStack));
        (*top)->next=NULL;
    }
}

主函数调用那就可以了~
InitLinkStack(&top);

或者试试另外一种

LinkStack InitLinkStack()
{
    LinkStack top=(LinkStack)malloc(sizeof(LinkStack));
    top->next=NULL;

    return top;
}

主函数调用

LinkStack top=InitLinkStack();

这样试试~

[此贴子已经被作者于2018-4-20 23:13编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-04-20 23:11
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:10 
#include <stdio.h>
#include <stdlib.h>
typedef int StackElemType;
typedef struct node
{
    StackElemType data;
    struct node *next;
}LinkStackNode;
typedef LinkStackNode *LinkStack;
void InitLinkStack(LinkStack top);
void Push(LinkStack top,StackElemType x);
int Pop(LinkStack top);
int main()
{
    LinkStack top;
    InitLinkStack(top);
    int i;
    for(i=0;i<10;i++)
        Push(top,i*10);
    for(i=0;i<10;i++)
        printf("%d",Pop(top));   
            
    return 0;
}
void InitLinkStack(LinkStack top)
{
    // 和楼上说的意思差不多,地址覆盖,出了方法是取不到这个实例化的对象了,改为返回对象
    top=(LinkStack)malloc(sizeof(LinkStack));
    top->next=NULL;
}
void Push(LinkStack top,StackElemType x)
{
    LinkStackNode *p;
    p=(LinkStackNode*)malloc(sizeof(LinkStackNode));
    p->data=x;
    p->next=top->next;
    top->next=p;
}
int Pop(LinkStack top)
{
    //这个是写错了吧?==和=不是一回事哦
    if(top->next=NULL)
    {
        printf("表为空\n");
        return 0;
    }
    int a;
    LinkStackNode *temp;
    temp=top->next;
    top->next=temp->next;
    a=temp->data;
    free(temp);
    return a;
}   

剑栈风樯各苦辛,别时冰雪到时春
2018-04-20 23:36
堃周
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-4-6
收藏
得分:0 
回复2楼 九转星河
第一种方法我想了一下感觉有理,但是我试了一下还是没有运行出来
void InitLinkStack(LinkStack* top)
{
    *top=(LinkStack)malloc(sizeof(LinkStack));
    (*top)->next=NULL;
   
}
第二种
LinkStack InitLinkStack(LinkStack top)
{
    top=(LinkStack)malloc(sizeof(LinkStack));
    top->next=NULL;
    return top;
}
调用时      top=InitLinkStack(top);
但是依然不能

我排除了一下错误的地方,很有可能是进栈的问题

[此贴子已经被作者于2018-4-20 23:49编辑过]

2018-04-20 23:47
堃周
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-4-6
收藏
得分:0 
回复 3楼 林月儿
哦哦哦 所以综上所述我的错误是在这两个地方  
 一个是对top的操作无效
二个是top->next=NULL写错了
所以,如果只是改了一个也不能运行出来

非常感谢
2018-04-20 23:55
堃周
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-4-6
收藏
得分:0 
回复 2楼 九转星河
难不怪我还是运行不出来  哈哈原来如此
 非常感谢 教了我两种对top的有效操作
2018-04-20 23:59
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 6楼 堃周
其实我就看了一个,所以说要有一定的跟踪调试程序能力才行~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-04-21 00:24
堃周
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-4-6
收藏
得分:0 
回复 7楼 九转星河
恩,就是
2018-04-21 11:08
快速回复:链栈的简单操作 求解 为什么运行不出结果
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.022091 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved