| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1225 人关注过本帖
标题:看看出栈问题在哪里?~
取消只看楼主 加入收藏
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
结帖率:99.25%
收藏
已结贴  问题点数:20 回复次数:3 
看看出栈问题在哪里?~
初学栈~出栈出问题了~帮忙看看~

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<windows.h>
#include<conio.h>
#include<time.h>

#define stack_SIZE 20
#define  stack_add_SIZE 10

typedef struct STACK
{
    char* top;      //栈顶指针
    char* base;     //栈底指针
    int stacklen;   //栈长度
}STACK;

void initialization(STACK* s);   //初始化
void push(STACK* s,char e);      //入栈
void pop(STACK* s,char* e);      //出栈
void print();                    //获取当前栈元素

int stacklen(STACK* s);          //计算当前栈容量

void enpty(STACK *s);            //清空栈
void destroy(STACK* s);          //销毁栈

int main()
{
    int i=0;
    int len=0;

    char ch=0;

    STACK stack={0};

    srand((unsigned )time(NULL));

    initialization(&stack);

    puts("入栈示例:");

    len=rand()%50+5;

    for (i=0;i<len;++i)
    {
        ch=rand()%('z'-'a')+'a';
        push(&stack,ch);
        putchar(ch);
    }

    printf("\n该栈长度为:%d\n",len);

    puts("出栈示例:");

    while (stack.top!=stack.base)
    {
        pop(&stack,&ch);
        putchar(ch);
    }

    puts("");
    
    return 0;
}


void initialization(STACK* s)
{
    s->top=s->base=(char* )malloc(stack_SIZE*sizeof(char));//分配储存空间

    if (s->top==NULL)  //检查栈空间分配是否出错
    {
        puts("分配空间失败");
        exit(0);
    }

    s->stacklen=stack_SIZE;  //记录栈空间大小
}


void push(STACK* s,char e)
{
    if (s->stacklen==s->top-s->base) //检查是否栈满
    {
        s->base=(char* )realloc(s->base,(s->stacklen+stack_add_SIZE)*sizeof(char));//扩容
        s->stacklen+=stack_add_SIZE;     //这里要改变栈的长度
    }

    *s->top=e;
    ++s->top;
}

void pop(STACK* s,char* e)
{
    if (s->top==s->base)  //如果空栈就返回
        return ;

    *e=*--(s->top);
}

int stacklen(STACK* s)
{
    return (s->top-s->base);
}

void enpty(STACK* s)
{
    s->top=s->base;  //清空
}

void destroy(STACK* s)  
{
    free(s->base);

    s->base=NULL;
    s->top=NULL;
    s->stacklen=0;
}


[此贴子已经被作者于2017-3-6 23:30编辑过]

2017-03-06 21:06
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
c4没有问题~但vc不行~提示while里面的条件没有成立而导致访问了额外的内存~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-07 08:59
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
上面两位一针见血指出来问题所在~又学习到新东西了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-07 15:30
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
弄懂了~拜谢
~~~~~~~~~~~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-07 17:35
快速回复:看看出栈问题在哪里?~
数据加载中...
 
   



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

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