标题:为什么在C++运行出来,将&去掉在C中却运行不出来
只看楼主
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
你可以修改push和pop函数,让L->next指向栈顶,这样就不需要用指针了,如下:
程序代码:
int push(ZhanL L,int data)
{
    //创建一个新的结点
    ZhanL p=(ZhanL)malloc(sizeof(zhan));
    p->data=data;
    p->next = L->next;
    L->next = p;
    return 0;
}
int pop(ZhanL L)
{
    if(L->next){
        ZhanL s=L->next;//释放空间用
        printf("%d ",s->data);
        L->next = s->next;
        if(L->next)
        { 
        //    printf("%d \n",L->data);
        } 
        else
        {
            printf("栈空\n");
        }
        free(s);
    }
    return 0;
}


[此贴子已经被作者于2020-3-24 21:41编辑过]


能编个毛线衣吗?
2020-03-24 21:29
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
成功运行的全部代码如下:
程序代码:
#include<stdio.h>
#include<stdlib.h>

typedef struct zhan {
    int data;
    struct zhan *next;
}zhan, *ZhanL;

/**

 * 初始化栈

 * */
ZhanL initZhan() {
    ZhanL L = (ZhanL)malloc(sizeof(zhan));
    L->next = NULL;
    return L;
}

/**

 * 进栈操作

 * */
int push(ZhanL L, int data)
{
    //创建一个新的结点
    ZhanL p = (ZhanL)malloc(sizeof(zhan));
    p->data = data;
    p->next = L->next;
    L->next = p;
    return 0;
}
int pop(ZhanL L)
{
    if (L->next) {
        ZhanL s = L->next;//释放空间用
        printf("%d ", s->data);
        L->next = s->next;
        if (L->next)
        {
            //    printf("%d \n",L->data);
        }
        else
        {
            printf("栈空\n");
        }
        free(s);
    }
    return 0;
}

/**

 * 转换方法

 * */
int zhuanhuan(ZhanL L, int data, int jz) {
    while (data) {
        push(L, data%jz);
        data = data / jz;
    }

    while (L) {
        pop(L);
    }
    return 0;
}


int main() {
    ZhanL L;
    L = initZhan();
    printf("请输入一个十进制数");
    int data, jz;
    scanf("%d", &data);
    printf("请输入转换的进制");
    scanf("%d", &jz);
    zhuanhuan(L, data, jz);
    return 0;
}

能编个毛线衣吗?
2020-03-24 21:42
牵绊绊
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2020-3-22
得分:0 
回复 21楼 wmf2014
奥奥,可以了,刚试了一下,非常感谢
2020-03-24 21:44
maomao12345
Rank: 2
来 自:五位神奇空间
等 级:禁止访问
威 望:2
帖 子:127
专家分:64
注 册:2020-3-23
得分:0 
用cout应该能打出中文字符吧?

一个快乐的小小孩
2020-03-25 09:03
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
得分:0 
cout可以

2020-03-25 09:04
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
得分:0 
但cout慢

2020-03-25 09:04
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
得分:0 
回复 24楼 maomao12345
还有你好像发帖子的频率比我还高啊

2020-03-25 09:07
牵绊绊
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2020-3-22
得分:0 
回复 22楼 wmf2014
你这个代码的话,那就说明他不是一个栈了吧,这不就是进行了尾插法吗?
搞不懂
2020-03-25 21:23
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
为什么不是个栈?栈是一段存储空间,存储在这里的数据具有先进后出的特性。无论尾插法还是改变栈顶指针只是实现手段而已,并不改变栈数据存取的特征。
以下是百度到的“栈”内容:栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。...栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。...栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。

能编个毛线衣吗?
2020-03-25 21:58
牵绊绊
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2020-3-22
得分:0 
回复 29楼 wmf2014
啊,好吧,非常感谢!
2020-03-27 08:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-500553-1-1.html




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

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