yuqiuwangzi 发表于 2013-10-12 14:02:51

栈程序求助

/*
        时间: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 时出错.


看了好几遍都不知道哪里错了,求高手指教。。。

yuqiuwangzi 发表于 2013-10-12 15:48:02

大神在何方

tsembrace 发表于 2013-10-12 16:14:08

C语言里没有bool类型的吧
先把pop/empty返回类型改成int再看看有没其他问题

yuqiuwangzi 发表于 2013-10-12 16:52:19

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;
        }
}

tsembrace 发表于 2013-10-12 17:21:42

既然你把bool改成int就可以运行,那我倒觉得不必太纠结这个吧。
你贴的那个代码,我这依然是报错,我用的VC6
如果真要用bool,就自己定义一下

yuqiuwangzi 发表于 2013-10-12 17:32:24

tsembrace 发表于 2013-10-12 17:21 static/image/common/back.gif
既然你把bool改成int就可以运行,那我倒觉得不必太纠结这个吧。
你贴的那个代码,我这依然是报错,我用的V ...

第二次贴的代码我这里可以成功运行,就是不知道为什么第一次贴的那个不行。还是谢谢你了

牡丹花下死做鬼 发表于 2013-10-12 18:33:05

C 没有BOOL的C++才有 可以加#define bool int
#define true 1
#define false 0

yuqiuwangzi 发表于 2013-10-12 18:41:21

牡丹花下死做鬼 发表于 2013-10-12 18:33 static/image/common/back.gif
C 没有BOOL的C++才有 可以加

为毛我第二次贴的代码在VC++6.0里可以直接编译运行,没出错。。。

牡丹花下死做鬼 发表于 2013-10-12 18:48:23

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)

yuqiuwangzi 发表于 2013-10-12 19:00:01

牡丹花下死做鬼 发表于 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)


无语。。。我这边很顺利

逍滛怪亾 发表于 2013-10-12 19:21:25

表示用dev
就运行了

yuqiuwangzi 发表于 2013-10-12 19:24:31

逍滛怪亾 发表于 2013-10-12 19:21 static/image/common/back.gif
表示用dev
就运行了

这是神马情况。。。

逍滛怪亾 发表于 2013-10-12 19:35:10

yuqiuwangzi 发表于 2013-10-12 19:24 static/image/common/back.gif
这是神马情况。。。

这个就不太清楚了啊,可能支持bool吧

yuqiuwangzi 发表于 2013-10-12 19:46:25

逍滛怪亾 发表于 2013-10-12 19:35 static/image/common/back.gif
这个就不太清楚了啊,可能支持bool吧

但我贴的第二段代码可以在VC++6.0运行,第一段却不行。。。

逍滛怪亾 发表于 2013-10-12 20:08:57

yuqiuwangzi 发表于 2013-10-12 19:46 static/image/common/back.gif
但我贴的第二段代码可以在VC++6.0运行,第一段却不行。。。

这个。。。。就不太知道了,我原来在vc上编的dev用不了,你试一下大写的BOOL

yuqiuwangzi 发表于 2013-10-12 20:17:09

逍滛怪亾 发表于 2013-10-12 20:08 static/image/common/back.gif
这个。。。。就不太知道了,我原来在vc上编的dev用不了,你试一下大写的BOOL

木有作用,以后再研究吧。。。

牡丹花下死做鬼 发表于 2013-10-12 20:24:36

yuqiuwangzi 发表于 2013-10-12 19:00 static/image/common/back.gif
--------------------Configuration: stack - Win32 Debug--------------------
Compiling...
stack.cp ...

stack.cpp
*.cpp 当然正常啊 这是C++啊
我说了C++是支持的

peng3726 发表于 2013-10-14 19:41:38

学习,继续升级中
页: [1]
查看完整版本: 栈程序求助