首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

一个非常简单的指针判断为空有关问题

2012-03-04 
一个非常简单的指针判断为空问题。废话不多说,看代码。/*****************************************//****st

一个非常简单的指针判断为空问题。
废话不多说,看代码。

/*****************************************/
/****                         stack.h                             ****/
/*****************************************/

#   include   <stdlib.h>

#   ifndef   NULL
#   define   NULL   ((void*)0);
#   endif

typedef   char   datatype;
typedef   struct   node{
datatype   data;
struct   node*   next;
}   stacknode,*   slink;

void   Clearstack(slink   top)
{
top=NULL;
}

int   Emptystack(slink   top)
{
if(top   ==   NULL)
{
return   (1);
}
else
{
return   (0);
}
}

//ERROR
void   Push(slink&   top,datatype   x)
{

slink   p;
if(Emptystack(top))
{
    p=(slink)malloc(sizeof(stacknode));
            p-> data=x;
    p-> next=top;
    top=p;
    free(p);
}
else
{

    p=(slink)malloc(sizeof(stacknode));
    p-> data=x;
    p-> next=top;
    top=p;
            //free(p);
}
}

datatype   Pop(slink&   top)
{
datatype   x;
slink   p;

if(Emptystack(top))
{
return   NULL;
}
else
{
x=top-> data;
p=top;
top=top-> next;
free(p);
return   (x);
}
}


/******************************************************/
/****                         表达式括号匹配的检验.cpp                     ****/
/******************************************************/

#   include   "stack.h "
#   include   <iostream.h>

int   bdsxgs(char   E[]);

void   main()
{
char   a[]= "A[(I-2)*4]+3# ";
if(bdsxgs(a))
{
cout < < "括号匹配。 " < <endl;
}
else
{
cout < < "   括号不匹配. "   < <endl;
}
}

int   bdsxgs(char   E[])
{
int   i=0;
char   x;
slink   top;
Clearstack(top);
while(E[i]!= '# ')
{
if(E[i]== '( '||E[i]== '[ ')
{
Push(top,E[i]);
}
if(E[i]== ') '||E[i]== '] ')  
{
if(Emptystack(top))
{
return   (0);
}
else
{
x=Pop(top);
if(x== '( '&&E[i]== '] '||x== '[ '&&E[i]== ') ')
{
return   (0);
}
}
}
i++;
}
//cout < < "... " < <endl;

if(Emptystack(top))
{
//cout < < "???   " < <endl;
return   (1);
}
else
{
//cout < < "???   " < <endl;
return   (0);
}
}

--------------------Configuration:   表达式括号匹配的检验   -   Win32   Debug--------------------


Compiling...
表达式括号匹配的检验.cpp
c:\documents   and   settings\hwx\桌面\表达式括号匹配的检验.cpp(28)   :   warning   C4700:   local   variable   'top '   used   without   having   been   initialized
Linking...

表达式括号匹配的检验.exe   -   0   error(s),   1   warning(s)


运行结果:
    括号不匹配。

郁闷中,还望高手指点迷津。


[解决办法]
问题出在两个地方:
一是Clearstack的定义应该是这样的:void Clearstack(slink& top);你少加了一个&号。
二是在Push函数中 if(Emptystack(top))的时候,你不能把free(p),也就是说你的这个判断是无意义的,top是否为空的两种情况本来就是应该同等对待的。

热点排行