栈程序求助
/*时间:2013年10月11日10:48
功能:栈程序的演示
*/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node * pNext;
}NODE, *PNODE;
typedef struct Stack
{
PNODE pTop;
PNODE pBottom;
}STACK, *PSTACK;
void init( PSTACK ); // 初始化函数
void push( PSTACK, int );// 压栈函数
void traverse( PSTACK ); // 遍历函数
bool pop( PSTACK, int * ); // 出栈函数
bool empty( PSTACK pS ); // 判断栈是否为空
void clear(PSTACK pS); // 清空栈
int main( void )
{
STACK S;
int val;
init( &S ); // 目的是造出一个空栈
push( &S, 1 );
push( &S, 2 );
push( &S, 3 );
push( &S, 4 );
push( &S, 5 );
push( &S, 6 );
traverse( &S ); // 遍历输出
if ( pop( &S, &val ) )
{
printf( "出栈成功,出栈的元素是%d\n", val );
}
else
{
printf( "出栈失败!\n" );
}
traverse( &S );
return 0;
}
void init( PSTACK pS )
{
pS->pTop = (PNODE)malloc( sizeof( NODE ) );
if ( NULL == pS->pTop )
{
printf( "动态内存分配失败!\n" );
exit( -1 );
} // end if
else
{
pS->pBottom = pS->pTop;
pS->pTop->pNext = NULL;
} // end else
} // end function init
void push( PSTACK pS, int val )
{
PNODE pNew = (PNODE)malloc( sizeof( NODE ) );
pNew->data = val;
pNew->pNext = pS->pTop;
pS->pTop = pNew;
return;
} // end function push
void traverse( PSTACK pS )
{
PNODE p = pS->pTop;
while ( p != pS->pBottom )
{
printf( "%d", p->data );
p = p->pNext;
} // end while
printf( "\n" );
return;
} // end function traverse
bool empty( PSTACK pS ) // 判断栈是否为空
{
if ( pS->pTop == pS->pBottom )
return true;
else
return false;
} // end function empty
/*
把pS指向的栈出栈一次,并把出栈的元素存入pVal形参所指向的变量中,
如果出栈失败则返回false,出栈成功则返回true
*/
bool pop( PSTACK pS, int * pVal )
{
if ( empty( pS ) )
{
return false;
}
else
{
PNODE r = pS->pTop;
*pVal = r->data;
pS->pTop = r->pNext;
free( r );
r = NULL;
return true;
} // end else
} // end function pop
void clear(PSTACK pS)
{
if (empty(pS))
{
return;
}
else
{
PNODE p = pS->pTop;
PNODE q = NULL;
while (p != pS->pBottom)
{
q = p->pNext;
free(p);
p = q;
} // end while
pS->pTop = pS->pBottom;
} // end else
} // end function clear
C2061: syntax error : identifier 'pop'
C:\Users\xiaotong\Desktop\工程\栈程序演示.c(26) : error C2059: syntax error : ';'
C:\Users\xiaotong\Desktop\工程\栈程序演示.c(26) : error C2059: syntax error : 'type'
C:\Users\xiaotong\Desktop\工程\栈程序演示.c(27) : error C2061: syntax error : identifier 'empty'
C:\Users\xiaotong\Desktop\工程\栈程序演示.c(27) : error C2059: syntax error : ';'
C:\Users\xiaotong\Desktop\工程\栈程序演示.c(27) : error C2059: syntax error : 'type'
C:\Users\xiaotong\Desktop\工程\栈程序演示.c(45) : warning C4013: 'pop' undefined; assuming extern returning int
C:\Users\xiaotong\Desktop\工程\栈程序演示.c(99) : error C2061: syntax error : identifier 'empty'
C:\Users\xiaotong\Desktop\工程\栈程序演示.c(99) : error C2059: syntax error : ';'
C:\Users\xiaotong\Desktop\工程\栈程序演示.c(99) : error C2059: syntax error : 'type'
C:\Users\xiaotong\Desktop\工程\栈程序演示.c(111) : error C2061: syntax error : identifier 'pop'
C:\Users\xiaotong\Desktop\工程\栈程序演示.c(111) : error C2059: syntax error : ';'
C:\Users\xiaotong\Desktop\工程\栈程序演示.c(111) : error C2059: syntax error : 'type'
C:\Users\xiaotong\Desktop\工程\栈程序演示.c(131) : warning C4013: 'empty' undefined; assuming extern returning int
执行 cl.exe 时出错.
看了好几遍都不知道哪里错了,求高手指教。。。
大神在何方 C语言里没有bool类型的吧
先把pop/empty返回类型改成int再看看有没其他问题 tsembrace 发表于 2013-10-12 16:14 static/image/common/back.gif
C语言里没有bool类型的吧
先把pop/empty返回类型改成int再看看有没其他问题
试了,可以运行。不过别人这段代码也有bool类型,但是可以成功编译运行。。。# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
typedef struct Node
{
int data;
struct Node * pNext;
}NODE, * PNODE;
typedef struct Stack
{
PNODE pTop;
PNODE pBottom;
}STACK, * PSTACK;//PSTACK 等价于 struct STACK *
void init(PSTACK);
void push(PSTACK, int );
void traverse(PSTACK);
bool pop(PSTACK, int *);
void clear(PSTACK pS);
int main(void)
{
STACK S;//STACK 等价于 struct Stack
int val;
init(&S);//目的是造出一个空栈
push(&S, 1); //压栈
push(&S, 2);
push(&S, 3);
push(&S, 4);
push(&S, 5);
push(&S, 6);
traverse(&S); //遍历输出
clear(&S);
//traverse(&S); //遍历输出
if ( pop(&S, &val) )
{
printf("出栈成功,出栈的元素是%d\n", val);
}
else
{
printf("出栈失败!\n");
}
traverse(&S); //遍历输出
return 0;
}
void init(PSTACK pS)
{
pS->pTop = (PNODE)malloc(sizeof(NODE));
if (NULL == pS->pTop)
{
printf("动态内存分配失败!\n");
exit(-1);
}
else
{
pS->pBottom = pS->pTop;
pS->pTop->pNext = NULL; //pS->Bottom->pNext = NULL;
}
}
void push(PSTACK pS, int val)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
pNew->data = val;
pNew->pNext = pS->pTop; //pS->Top不能改成pS->Bottom
pS->pTop = pNew;
return;
}
void traverse(PSTACK pS)
{
PNODE p = pS->pTop;
while (p != pS->pBottom)
{
printf("%d", p->data);
p = p->pNext;
}
printf("\n");
return;
}
bool empty(PSTACK pS)
{
if (pS->pTop == pS->pBottom)
return true;
else
return false;
}
//把pS所指向的栈出栈一次,并把出栈的元素存入pVal形参所指向的变量中,如果出栈失败,返回false,否则返回true
bool pop(PSTACK pS, int * pVal)
{
if ( empty(pS) ) //pS本身存放的就是S的地址
{
return false;
}
else
{
PNODE r = pS->pTop;
*pVal = r->data;
pS->pTop = r->pNext;
free(r);
r = NULL;
return true;
}
}
既然你把bool改成int就可以运行,那我倒觉得不必太纠结这个吧。
你贴的那个代码,我这依然是报错,我用的VC6
如果真要用bool,就自己定义一下
tsembrace 发表于 2013-10-12 17:21 static/image/common/back.gif
既然你把bool改成int就可以运行,那我倒觉得不必太纠结这个吧。
你贴的那个代码,我这依然是报错,我用的V ...
第二次贴的代码我这里可以成功运行,就是不知道为什么第一次贴的那个不行。还是谢谢你了 C 没有BOOL的C++才有 可以加#define bool int
#define true 1
#define false 0 牡丹花下死做鬼 发表于 2013-10-12 18:33 static/image/common/back.gif
C 没有BOOL的C++才有 可以加
为毛我第二次贴的代码在VC++6.0里可以直接编译运行,没出错。。。 yuqiuwangzi 发表于 2013-10-12 18:41 static/image/common/back.gif
为毛我第二次贴的代码在VC++6.0里可以直接编译运行,没出错。。。
--------------------Configuration: first - Win32 Debug--------------------
Compiling...
first.c
C:\Documents and Settings\Administrator\桌面\first\VC++6.0\first\first.c(20) : error C2061: syntax error : identifier 'pop'
C:\Documents and Settings\Administrator\桌面\first\VC++6.0\first\first.c(20) : error C2059: syntax error : ';'
C:\Documents and Settings\Administrator\桌面\first\VC++6.0\first\first.c(20) : error C2059: syntax error : 'type'
C:\Documents and Settings\Administrator\桌面\first\VC++6.0\first\first.c(40) : warning C4013: 'pop' undefined; assuming extern returning int
C:\Documents and Settings\Administrator\桌面\first\VC++6.0\first\first.c(94) : error C2061: syntax error : identifier 'empty'
C:\Documents and Settings\Administrator\桌面\first\VC++6.0\first\first.c(94) : error C2059: syntax error : ';'
C:\Documents and Settings\Administrator\桌面\first\VC++6.0\first\first.c(94) : error C2059: syntax error : 'type'
C:\Documents and Settings\Administrator\桌面\first\VC++6.0\first\first.c(103) : error C2061: syntax error : identifier 'pop'
C:\Documents and Settings\Administrator\桌面\first\VC++6.0\first\first.c(103) : error C2059: syntax error : ';'
C:\Documents and Settings\Administrator\桌面\first\VC++6.0\first\first.c(103) : error C2059: syntax error : 'type'
Error executing cl.exe.
first.obj - 9 error(s), 1 warning(s)
牡丹花下死做鬼 发表于 2013-10-12 18:48 static/image/common/back.gif
--------------------Configuration: first - Win32 Debug--------------------
Compiling...
first. ...
--------------------Configuration: stack - Win32 Debug--------------------
Compiling...
stack.cpp
stack.obj - 0 error(s), 0 warning(s)
无语。。。我这边很顺利 表示用dev
就运行了 逍滛怪亾 发表于 2013-10-12 19:21 static/image/common/back.gif
表示用dev
就运行了
这是神马情况。。。 yuqiuwangzi 发表于 2013-10-12 19:24 static/image/common/back.gif
这是神马情况。。。
这个就不太清楚了啊,可能支持bool吧 逍滛怪亾 发表于 2013-10-12 19:35 static/image/common/back.gif
这个就不太清楚了啊,可能支持bool吧
但我贴的第二段代码可以在VC++6.0运行,第一段却不行。。。 yuqiuwangzi 发表于 2013-10-12 19:46 static/image/common/back.gif
但我贴的第二段代码可以在VC++6.0运行,第一段却不行。。。
这个。。。。就不太知道了,我原来在vc上编的dev用不了,你试一下大写的BOOL 逍滛怪亾 发表于 2013-10-12 20:08 static/image/common/back.gif
这个。。。。就不太知道了,我原来在vc上编的dev用不了,你试一下大写的BOOL
木有作用,以后再研究吧。。。 yuqiuwangzi 发表于 2013-10-12 19:00 static/image/common/back.gif
--------------------Configuration: stack - Win32 Debug--------------------
Compiling...
stack.cp ...
stack.cpp
*.cpp 当然正常啊 这是C++啊
我说了C++是支持的 学习,继续升级中
页:
[1]