| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 337 人关注过本帖
标题:关于栈清空的问题?帮忙看一下这个程序哪里错了,执行到 clear 操作,程序就 ...
只看楼主 加入收藏
航天嘎子
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-6-26
结帖率:0
收藏
 问题点数:0 回复次数:2 
关于栈清空的问题?帮忙看一下这个程序哪里错了,执行到 clear 操作,程序就终止运行了
# include<stdio.h>
# include<malloc.h>
# include<stdlib.h>
typedef struct Node
{
    int data;
    struct Node *pNext;
}NODE,*PNODE;
typedef struct stack
{
    PNODE pTop;
    PNODE pBottom;
}STACK,*PSTACK;
void init(PSTACK);
void push(PSTACK,int);
void traverse(PSTACK);
bool is_empty(PSTACK);
bool pop(PSTACK ,int *);
void clear(PSTACK);
int main(void)
{
    STACK S;
    int val;
    //构造一个栈
    init(&S);
    push(&S,1);
    push(&S,8);
    push(&S,91);
    push(&S,10);
    push(&S,12);
    push(&S,113);
    traverse(&S);
    if(pop(&S,&val))
    {
        printf("出栈成功,出栈的元素是:val = %d\n",val);
    }
    else
    {
        printf("出栈失败。\n");
    }
    traverse(&S);
   
    clear(&S);
    if(pop(&S,&val))
    {
        printf("出栈成功,出栈的元素是:val = %d\n",val);
    }
    else
    {
        printf("出栈失败。\n");
    }

    return 0;
}
//构造一个栈
void init(PSTACK S)
{
    PNODE pNew = (PNODE)malloc(sizeof(NODE));
    if(pNew == NULL)
    {
        printf("动态内存分配失败。\n");
        exit(-1);
    }
    else
    {
        S->pBottom = S->pTop;
        
        S->pTop = NULL;
    }
    return;
}
//压栈操作
void push(PSTACK S,int val)
{
    PNODE pNew = (PNODE)malloc(sizeof(NODE));
    if(pNew == NULL)
    {
        printf("动态内存分配失败。\n");
        exit(-1);
    }
    pNew->data = val;
    pNew->pNext = S->pTop;
    S->pTop = pNew;
}
//遍历输出
void traverse(PSTACK S)
{
    PNODE p =S->pTop;
    while(p!=NULL)
    {
        printf("%d   ",p->data);
        p = p->pNext;
    }
    printf("\n");

    return ;
}
bool is_empty(PSTACK S)
{
    if(S->pTop==S->pBottom)
    {
        return true;
    }
    else
    {
        return false;
    }
}
//出栈操作
bool pop(PSTACK S,int *pVal)
{
    if(is_empty(S))
    {
        printf("栈为空,不能出栈。\n");
        return false;
    }
   
    else
    {
        PNODE r = S->pTop;
        *pVal = r->data;
         S->pTop = r->pNext;
        free(r);
        r = NULL;
        return true;
    }
}
void clear(PSTACK s)
{
    PNODE q = NULL;

    if(is_empty(s))
    {
        return;
    }
    else
    {
        PNODE p = s->pTop;
        while(p!=s->pBottom)
        {
            q = p->pNext;
            free(p);
            p = q;
        }
    }
}
搜索更多相关主题的帖子: include 
2014-07-08 08:05
航天嘎子
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-6-26
收藏
得分:0 
帮忙看看,谢谢大家了
2014-07-09 15:02
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
链栈的初始化和清空啥关系?

梦想拥有一台龙芯3A-4000
2014-07-09 17:01
快速回复:关于栈清空的问题?帮忙看一下这个程序哪里错了,执行到 clear 操作, ...
数据加载中...
 
   



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

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