免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1285 | 回复: 4
打印 上一主题 下一主题

c实现stack的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-29 15:07 |只看该作者 |倒序浏览
结果输出来总是有问题,输出3个问号。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#define INI_SIZE 20;
#define INCREMENT 10;
typedef struct SElem
{
    char c;
} Elem;

typedef struct SStack
{
    Elem * base;
    Elem * top;
    int stacksize;
} Stack;

void initStack(Stack *s)
{
    Elem * elem = (Elem *)malloc(20 * sizeof(Elem));
    if(!elem) exit(0);
    s->base = elem;
    s->stacksize = 20;
    s->top = s->base;
    return;
}

void push(Stack *s,Elem elem)
{            
    if(s->top - s->base >= s->stacksize)
    {      
        s->base = (Elem *)realloc(s->base,(s->stacksize + 10) * sizeof(Elem));
        if(!s->base) exit(0);
        s->top = s->base + s->stacksize;
        s->stacksize += 10;
    }
    *s->top = elem;
    s->top++;
   
}

int pop(Stack *s,Elem *e)
{   
    if(s->top == s->base) return 0;
    s->top--;
    e = s->top;
    return 1;
}
int isEmpty(Stack s)
{
    return s.top == s.base;
}

int main(void)
{
    Stack s;
    initStack(&s);
    Elem e1,e2,e3,e;
    e1.c = 'a';
    push(&s,e1);
    e2.c = 'b';
    push(&s,e2);
    e3.c='c';
    push(&s,e3);

    while(!isEmpty(s))
    {
        if(pop(&s,&e)){
          printf("%c ",e.c);
        }
    }
    printf("\n");
    return 1;
}

论坛徽章:
0
2 [报告]
发表于 2005-11-29 15:38 |只看该作者
兄弟们,帮忙看一下吧。

论坛徽章:
0
3 [报告]
发表于 2005-11-29 16:27 |只看该作者

pop()函数使用指针的指针 int pop(Stack *s,Elem **e)

int pop(Stack *s,Elem **e)
{   
    if(s->top == s->base) return 0;
    s->top--;
    *e = s->top;
    return 1;
}

Elem e1,e2,e3,*e;

         printf("%c ",(*e).c);

论坛徽章:
0
4 [报告]
发表于 2005-11-29 16:38 |只看该作者

最好加个销毁栈的函数destory(),以防内存泄露

void destory(Stack &s)
{
        free(s.base);
        s.base = NULL;
        s.top = NULL;
        s.stacksize = 0;
}


int main()
{
    ......
    destory(s);
    return 1;
}

论坛徽章:
0
5 [报告]
发表于 2005-11-30 09:27 |只看该作者
这也行
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP