| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1949 人关注过本帖
标题:栈的基本操作,请指点哪里出现错误。
只看楼主 加入收藏
chenxd
Rank: 2
来 自:北京
等 级:论坛游民
帖 子:20
专家分:24
注 册:2015-5-19
结帖率:33.33%
收藏
已结贴  问题点数:10 回复次数:3 
栈的基本操作,请指点哪里出现错误。
各位大神,请看一下我的顺序栈的建立与输出到底哪出现错误,百思不得其解。我用的是DEV-C。
#include <stdio.h>
#include <stdlib.h>
#include<malloc.h>

#define STACK_INIT_SIZE 100
typedef int SElemType;

 typedef struct {
    SElemType *base;
    SElemType *top;
    int StackSize;
}sqStack;

//创建栈
void InitialStack(sqStack *S)
{
    int a;
    S->base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
    if(!S->base)
        printf("创建失败!\n");
    else
    {
        S->top = S->base;
        S->StackSize = STACK_INIT_SIZE;
        scanf("%d",&a);
        while(a!=-1&&((S->top )- (S->base )< (S->StackSize)))
        {
            *(S->top)=a;
            S->top++;
                     scanf("%d",&a);
        }
    }   
}
void StackPrintf(sqStack *S){
    SElemType *p;
    p=S->base;
    while(p!=S->top)
        {
        printf(" %d",*p);
        p++;}
}

int main(int argc, char *argv[]) {
   
    sqStack *S;
    printf("\n创建一个栈:\n");
    InitialStack(S);
    //输出栈
    StackPrintf(S);
    return 0;
}
搜索更多相关主题的帖子: include 
2015-11-26 20:57
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:10 
出现啥错误啦?想先输出最后进栈的元素,后输出最早进栈的元素
你可以改成这样:
void StackPrintf(sqStack *S){
    SElemType *p;
    p=S->top;

    while(p--!=S->base)
        {
            printf(" %d",*p);
        }
}

你的程序有一个潜在的错误,
主程序中的sqStack *S;指针并未初始化,你就放到InitialStack调用。
*S就是一个大家通常说的野指针,S->base =.....这句,S都不知道指向何处,何来的->base?

我们都在路上。。。。。
2015-11-27 10:31
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
另外,从程序设计的角度上来说,最好把数据的输入从数据结构代码分离出来。
函数接口专注于干一件事,你可以将初始化栈操作放入init_stack()函数里。
将,压栈操作放入push_stack()函数里,出栈操作放入pop_stack()函数里。。
遍历操作放入foreach_stack(), 消毁栈操作放入destory_stack().....

init_stck()只做初始化,不干压栈的事。
push_stack()只做压栈的操作,不处理数据从控制台输入输出的事儿。
这样代码可以变得更清晰,调试起来也方便。

我们都在路上。。。。。
2015-11-27 11:19
chenxd
Rank: 2
来 自:北京
等 级:论坛游民
帖 子:20
专家分:24
注 册:2015-5-19
收藏
得分:0 
回复 2楼 hellovfp
谢谢!我在主程序中修改了一下,就可以了。
   sqStack stack,*S;
    S = &stack;

不要嘲笑我家樱木!
2015-11-27 12:48
快速回复:栈的基本操作,请指点哪里出现错误。
数据加载中...
 
   



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

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