游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2229|回复: 1

C的双向栈实现出了点问题,谁帮忙调试下哦 急啊

[复制链接]

6

主题

26

帖子

26

积分

注册会员

Rank: 2

积分
26
QQ
发表于 2007-11-11 18:49:00 | 显示全部楼层 |阅读模式
#define MAXSIZE 100
#define OK 1
#define NO 0
typedef int ElemType;
typedef int Status;
typedef struct{
        ElemType *base;
        ElemType *top;
        int length;
}Stack;
Status InitStack(Stack *s1,Stack *s2)
{
        ElemType array[MAXSIZE];
        array[99]=99;
        s1->base=array;
        s1->length=0;
        s1->top=s1->base;
        s2->length=0;
        s2->base=&array[MAXSIZE-1];
        printf("----%d----",*(s2->base));
        s2->top=s2->base;
        printf("----%d----",*(s2->top));
        return OK;
}

int StackLength(Stack *s)
{
        return s->length;
}

Status IsFull(Stack *s1,Stack *s2)
{
        if(s1->length+s2->length==MAXSIZE)
                return OK;
        return NO;
}

Status EnStack(Stack *s1,ElemType e,Stack *s2)
{       
        int flag;
        printf("--zhijie--%d----",*(s2->top));
        flag=IsFull(s1,s2);
        if(flag==1)//数组满了
                return NO;
        else
        {
                if(s1->base<s2->base)
                {
                        printf("-r-%d",*(s1->base));
                        printf("-r-%d",*(s2->base));
                        *(s1->top)=e;
                        s1->top++;
                        s1->length++;
                        return OK;
                }
                else
                {
                        printf("-rr-%d",*(s2->base));
                        printf("--%d",*(s1->base));
                        printf("--%d",*(s1->top));
                        printf("s2");
                        *(s1->top)=e;
                        printf("s2s");
                        printf("%d",*(s1->top));
                        (s1->top)--;
                        printf("s2");
                        s1->length++;
                        printf("s2");
                        printf("--%d",*(s1->base));
                        return OK;                       
                }
        }
}

Status DeStack(Stack *s1,ElemType *e,Stack *s2)
{       
        if(s1->length==0)
        {       
                printf("此为空栈!\n");
                return NO;
        }
        if(s1->base<s2->base)//s1
        {
                s1->top--;
                *e=*(s1->top);
                s1->length--;
                return OK;
        }
        else//s2
        {
                s1->top++;
                *e=*(s1->top);
                s1->length--;
                return OK;
        }
}

void PrintStack(Stack *s1,Stack *s2)
{
        int i;
        ElemType *temp;
        if(s1->length==0)
        {
                printf("此为空队列!\n");
                return;
        }
        temp=s1->base;
        printf("shuchu");
        if(s1->base<s2->base)
        {
                for(i=0;i<s1->length;i++)
                {
                        printf("%d\t",*temp);
                        temp++;
                }
        }
        else
        {
                for(i=0;i<s1->length;i++)
                {
                        printf("%d\t",*temp);
                        temp--;
                }
        }
        printf("\n");
}

main()
{
        Stack s1,s2;
        ElemType temp,*e,x;
        e=&temp;
        x=5;
        InitStack(&s1,&s2);
        printf("ya%dya",*(s2.base));//这里的指针都还是对的
        PrintStack(&s1,&s2);
        PrintStack(&s2,&s1);
       
        printf("ya%dya",*(s2.base));//为什么这里的指针都出问题了
       
        EnStack(&s1,x,&s2);
        printf("ya%dya",*(s2.base));
        EnStack(&s1,x+1,&s2);
        printf("ya%dya",*(s2.base));
        EnStack(&s1,x+2,&s2);
        printf("ya%dya",*(s2.base));
        EnStack(&s1,x+3,&s2);
        printf("ya%dya",*(s2.base));
        EnStack(&s1,x+4,&s2);
        printf("ya%dya",*(s2.base));
        PrintStack(&s1,&s2);
        printf("3");
        EnStack(&s2,x+10,&s1);
        //PrintStack(&s2,&s1);
        printf("0\t");
                //PrintStack(&s2,&s1);
/*        EnStack(&s2,x+11,&s1);
        EnStack(&s2,x+12,&s1);
        EnStack(&s2,x+13,&s1);
        EnStack(&s2,x+14,&s1);*/
        printf("01\t");
        //PrintStack(&s1,&s2);
        //PrintStack(&s2,&s1);
/*       
        x=StackLength(&s1);
        printf("s1长度为%d\n",x);
        DeStack(&s1,e,&s2);
        printf("s1删除的数:%d\n",temp);
        PrintStack(&s1,&s2);
        x=StackLength(&s1);
        printf("s1长度为%d\n",x);

        DeStack(&s2,e,&s2);
        printf("s2删除的数:%d\n",temp);
        DeStack(&s2,e,&s2);
        printf("s2删除的数:%d\n",temp);
        PrintStack(&s2,&s1);
        x=StackLength(&s2);
        printf("s2长度为%d\n",x);
*/
        getch();
}

18

主题

82

帖子

86

积分

注册会员

Rank: 2

积分
86
发表于 2007-11-17 10:09:00 | 显示全部楼层

Re:C的双向栈实现出了点问题,谁帮忙调试下哦 急啊

写的好乱啊
InitStack中的ElemType array[MAXSIZE];这里array是一个局部变量,在退出这个函数后会被销毁,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-18 03:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表