| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 487 人关注过本帖
标题:链式堆栈求助
只看楼主 加入收藏
Spygg
Rank: 5Rank: 5
等 级:职业侠客
帖 子:135
专家分:394
注 册:2007-5-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
链式堆栈求助
#include<stdio.h>
#include<stdlib.h>
struct stacktype
{
    int data;
    struct    stacktype *link;
};
typedef struct stacktype stack;
int push(stack *top,int x)
{
    stack *p;
    p=(stack *)malloc(sizeof(stack));
    if(p==NULL)
    {
        printf("Memory alloc failed\n");
        exit(-1);
    }
    p->link=NULL;
    if(top==NULL)
    {
        top=p;
        top->data=x;
    }
    else
    {
        p->data=x;
        p->link=top;
        top=p;//这里我已经赋值了为什么top的地址值一直为0
    }
return (1);
}
int pop(stack *top)
{
    int x;
    if(top==NULL)
    {
        printf("stack empty\n");
        exit(0);
    }
    else
    {
        x=top->data;
        top=top->link;
        free(top);
    }
    return(x);
}
int main(void)
{
    stack * top;
    int i,n,x;
    top=NULL;
    printf("Input stack stize n\n");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        printf("Input x\n");
        scanf("%d",&x);
        push(top,x);
        printf("%x\n",top);//打印top值为0
    }
    for(i=0;i<n;i++)
    {
        x=pop(top);
        printf("%5d",x);
    }
    printf("\n");
}
搜索更多相关主题的帖子: 链式 堆栈 
2010-06-01 11:10
Kid_X
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:216
专家分:515
注 册:2007-10-8
收藏
得分:20 
push传入的是形参,所以在push()中你是无法改变外部的top的值的,所以,main函数中的top永远是NULL。要改变外部变量,就要传变量地址。
2010-06-01 11:29
Spygg
Rank: 5Rank: 5
等 级:职业侠客
帖 子:135
专家分:394
注 册:2007-5-20
收藏
得分:0 
回复 2楼 Kid_X
如果改成下面这种就对了,不过要用个数组保存返回值,我不想用数组
#include<stdio.h>
#include<stdlib.h>
typedef struct stacklist
{
    int data;
    struct stacklist * list;
}slist;
slist* push(slist *top,int x)//#include<stdio.h>
#include<stdlib.h>
typedef struct stacklist
{
    int data;
    struct stacklist * list;
}slist;
slist* push(slist *top,int x)
{
    slist *p;
    p=(slist*) malloc(sizeof(slist));
    if(p==NULL)
    {
        printf("Memory allocate failed\n");
        exit(0);
    }
    p->data=x;
    p->list=top;
    top=p;
    return(top);//这样返回可以
}
int pop(slist *top)
{
    slist *p;
    int z;
    p=top;
    if(top==NULL)
        {
            printf("Stack empty\n");
            exit(0);
        }
    else
    {
        z=p->data;
        p=p->list;
        free(p);
    }
    return (z);
}
int main(void)
{
    slist *top,*p[100];
    int i,z,n;
    top=NULL;
    printf("Input the stack size n\n");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        printf("Input z\n");
        scanf("%d",&z);
        p[i]=push(top,z);//竟然能够得到值!!!!!!!!!!!!!!!!
    }
    printf("Now pop the stack\n");
    for(i=n-1;i>=0;i--)
    {
        z=pop(p[i]);
        printf("%3d",z);
    }
    printf("\n");
}
{
    slist *p;
    p=(slist*) malloc(sizeof(slist));
    if(p==NULL)
    {
        printf("Memory allocate failed\n");
        exit(0);
    }
    p->data=x;
    p->list=top;
    top=p;
    return(top);
}
int pop(slist *top)
{
    slist *p;
    int z;
    p=top;
    if(top==NULL)
        {
            printf("Stack empty\n");
            exit(0);
        }
    else
    {
        z=p->data;
        p=p->list;
        free(p);
    }
    return (z);
}
int main(void)
{
    slist *top,*p[100];
    int i,z,n;
    top=NULL;
    printf("Input the stack size n\n");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        printf("Input z\n");
        scanf("%d",&z);
        p[i]=push(top,z);
    }
    printf("Now pop the stack\n");
    for(i=n-1;i>=0;i--)
    {
        z=pop(p[i]);
        printf("%3d",z);
    }
    printf("\n");
}
2010-06-01 12:14
Spygg
Rank: 5Rank: 5
等 级:职业侠客
帖 子:135
专家分:394
注 册:2007-5-20
收藏
得分:0 
现在正确了,感谢Kid_X
#include<stdio.h>
#include<stdlib.h>
struct stacktype
{
    int data;
    struct stacktype *link;
};
typedef struct stacktype stack;
int push(stack **top,int x)
{
    stack *p;
    p=(stack *)malloc(sizeof(stack));
    if(p==NULL)
    {
        printf("Memory alloc failed\n");
        exit(-1);
    }
    p->link=NULL;
    if(*top==NULL)
    {
        *top=p;
        (*top)->data=x;
    }
    else
    {
        p->data=x;
        p->link=*top;
        *top=p;     
    }
    return (*top);
}
int pop(stack **top)
{
    int x;
    if(*top==NULL)
    {
        printf("stack empty\n");
        exit(0);
    }
    else
    {
        x=(*top)->data;
        *top=(*top)->link;
        //free(*top);
    }
    return(x);
}
int main(void)
{
    stack * top;
    int i,n,x;
    top=NULL;
    printf("Input stack stize n\n");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        printf("Input x\n");
        scanf("%d",&x);
        push(&top,x);
    }
    for(i=0;i<n;i++)
    {
        x=pop(&top);
        printf("%5d",x);
    }
    printf("\n");
}
2010-06-01 16:28
快速回复:链式堆栈求助
数据加载中...
 
   



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

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