标题:关于数据与结构链栈的问题(十进制转八进制)
只看楼主
a15223198261
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-9-26
结帖率:0
已结贴  问题点数:20 回复次数:6 
关于数据与结构链栈的问题(十进制转八进制)
以下是我写的代码,可是一直循环。求各位大神指点#include<stdio.h>
#include<stdlib.h>
typedef struct StackNode
{
int data;
StackNode *next;
}StackNode,*LinkStack;
void InitStack(LinkStack S)
{
S=NULL;
}
void Push(LinkStack S,int N)
{
StackNode *q;
q=(StackNode*)malloc(sizeof(StackNode));
q->data=N%8;
q->next=S;
S=q;
}
void Pop(LinkStack S)
{
LinkStack q;
q=S;
printf("%d",S->data);
S=S->next;
free(q);
}
int main()
{
LinkStack S;
int N,e;
S=(LinkStack)malloc(sizeof(StackNode));
InitStack(S);
scanf("%d",&N);
while(N)
{
Push(S,N);
N=N/8;
}
while(S)
{
Pop(S);
}
}
搜索更多相关主题的帖子: 八进制 include 十进制 
2016-09-26 00:28
a15223198261
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-9-26
得分:0 
ddd
2016-09-26 09:33
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
得分:10 
要改变指针的指向,就得传入指针的地址,否则只能改变指针指向的对象的值。
例如
程序代码:
#include<stdlib.h>
#include <stdio.h>
typedef struct stackNode
{
    int data;
    struct stackNode *next;
}StackNode, *LinkStack;
void InitStack(LinkStack *S)
{
    *S = NULL;
}
void Push(LinkStack *S, int N)
{
    StackNode *q;
    q = (StackNode*)malloc(sizeof(StackNode));
    q->data = N % 8;
    q->next = *S;
    *S = q;
}
void Pop(LinkStack *S)
{
    LinkStack q;
    q = *S;
    printf("%d", (*S)->data);
    *S = (*S)->next;
    free(q);
}
int main()
{
    LinkStack S;
    int N, e;
    //S = (LinkStack)malloc(sizeof(StackNode));
    InitStack(&S);
    scanf("%d", &N);
    while (N)
    {
        Push(&S, N);
        N = N / 8;
    }
    while (S)
    {
        Pop(&S);
    }
}
2016-09-26 09:34
a15223198261
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-9-26
得分:0 
回复 3楼 grmmylbs
能详细说一说吗,麻烦了大神!!!
2016-09-26 12:45
a15223198261
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-9-26
得分:0 
dddd
2016-09-26 19:29
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:10 
你犯了一个基础错误,形参的值不会影响实参,除非传递的是地址。
你可能会说S的类型是指针,那你有没有考虑S的值是什么呢?
S=(LinkStack)malloc(sizeof(StackNode));S的值是这个空间地址。
InitStack(S);这句在这里没有一点意义,看似将S赋值NULL,实际上S还是原来的置。这个你可以自己加上两句printf("%p\n",S)看看调用前和调用后有没有区别。
我想说到这里,后面的应该就不用多解释吧。
2016-09-26 23:57
a15223198261
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-9-26
得分:0 
回复 6楼 linlulu001
懂了,蟹蟹了。
2016-09-28 15:30



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




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

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