标题:堆栈问题
只看楼主
ZJQLOVELYY
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:166
注 册:2011-8-1
结帖率:100%
 问题点数:0 回复次数:1 
堆栈问题
请问这个程序哪里出问题了?
程序代码:
[color=#0000FF]#include<stdio.h>
#include<stdlib.h>
#define N 5
struct stack
{
    int data;
    struct stack *next;
};
struct stack *head,*p;
int nodenum=0;
struct stack *creatstack()   //创建一个节点
{
    struct stack *pr;
    if((pr=malloc(sizeof(struct stack)))==NULL)
    {
        printf("Can not creat!");
        exit(0);
    }
    pr->next=NULL;
    return pr;
}
void pushstack(int d)   //压栈
{
    if(nodenum==0)
    {
        p=head=creatstack();
        nodenum++;
    }
    else
    {
        p->next=creatstack();
        nodenum++;
    }
   
    p->data=d;
}
int popstack()    //弹栈
{
    struct stack *pr;
    int d;
    p=head;
    while((p->next)!=NULL)
    {
        pr=p;
        p=p->next;
    }
    d=p->data;
    free(p);
    pr->next=NULL;
    return d;
}


int main()
{
    int popdata[5]={0},i,d;
    for(i=0;i<5;i++)
    {
        scanf("%d",&d);
        pushstack(d);
    }
    for(i=0;i<5;i++)
    {
        popdata[i]=popstack();
        printf("popdata[%d]=%d\n",nodenum--,popdata[i]);
    }

   
    return 0;
}


[/color]
搜索更多相关主题的帖子: next 
2012-01-21 13:49
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
得分:0 
简单改了一下,你的程序还有一些逻辑问题,自己尝试着修改一下吧。
c0000005错误多半来自你的指针非法操作,你的压栈函数有问题,所以导致出栈的时候出现非法指针错。
学会调试,不会的话,请搜索论坛。

#include<stdio.h>
#include<stdlib.h>
#define N 5
struct stack
{
    int data;
    struct stack *next;
};
struct stack *head,*p;
int nodenum=0;
struct stack *creatstack()   //创建一个节点
{
    struct stack *pr;
    if((pr=(struct stack *)malloc(sizeof(struct stack)))==NULL)
    {
        printf("Can not creat!");
        exit(0);
    }
    pr->next=NULL;
    return pr;
}
void pushstack(int d)   //压栈
{
    if(nodenum==0)
    {
        p=head=creatstack();
        nodenum++;
    }
    else
    {
        p->next=creatstack();
        nodenum++;
        p = p->next;
        p->next = 0;

    }
   
    p->data=d;
}
int popstack()    //弹栈
{
    struct stack *pr;
    int d;
    p=head;
    while((p->next)!=NULL)
    {
        pr=p;
        p=p->next;
    }
    d=p->data;
    free(p);
    pr->next=NULL;
    return d;
}


int main()
{
    int popdata[5]={0},i,d;
    for(i=0;i<5;i++)
    {
        scanf("%d",&d);
        pushstack(d);
    }
    for(i=0;i<5;i++)
    {
        popdata[i]=popstack();
        printf("popdata[%d]=%d\n",nodenum--,popdata[i]);
    }

   
    return 0;
}

我们都在路上。。。。。
2012-01-22 11:14



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




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

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