鱼C论坛

 找回密码
 立即注册
查看: 3780|回复: 17

栈程序求助

[复制链接]
发表于 2013-10-12 14:02:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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


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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-10-12 15:48:02 | 显示全部楼层
大神在何方
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-12 16:14:08 | 显示全部楼层
C语言里没有bool类型的吧
先把pop/empty返回类型改成int再看看有没其他问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-12 16:52:19 | 显示全部楼层

试了,可以运行。不过别人这段代码也有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;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-12 17:21:42 | 显示全部楼层
既然你把bool改成int就可以运行,那我倒觉得不必太纠结这个吧。
你贴的那个代码,我这依然是报错,我用的VC6
如果真要用bool,就自己定义一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-12 17:32:24 | 显示全部楼层
tsembrace 发表于 2013-10-12 17:21
既然你把bool改成int就可以运行,那我倒觉得不必太纠结这个吧。
你贴的那个代码,我这依然是报错,我用的V ...

第二次贴的代码我这里可以成功运行,就是不知道为什么第一次贴的那个不行。还是谢谢你了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-12 18:33:05 | 显示全部楼层
C 没有BOOL的C++才有 可以加
#define bool int
#define true 1
#define false 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-12 18:41:21 | 显示全部楼层
牡丹花下死做鬼 发表于 2013-10-12 18:33
C 没有BOOL的C++才有 可以加

为毛我第二次贴的代码在VC++6.0里可以直接编译运行,没出错。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-12 18:48:23 | 显示全部楼层
yuqiuwangzi 发表于 2013-10-12 18:41
为毛我第二次贴的代码在VC++6.0里可以直接编译运行,没出错。。。

QQ截图20131012184801.png
--------------------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)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-12 19:00:01 | 显示全部楼层
牡丹花下死做鬼 发表于 2013-10-12 18:48
--------------------Configuration: first - Win32 Debug--------------------
Compiling...
first. ...

--------------------Configuration: stack - Win32 Debug--------------------
Compiling...
stack.cpp

stack.obj - 0 error(s), 0 warning(s)


无语。。。我这边很顺利
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-12 19:21:25 | 显示全部楼层
表示用dev
就运行了
QQ图片20131012192043.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-12 19:24:31 | 显示全部楼层
逍滛怪亾 发表于 2013-10-12 19:21
表示用dev
就运行了

这是神马情况。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-12 19:35:10 | 显示全部楼层
yuqiuwangzi 发表于 2013-10-12 19:24
这是神马情况。。。

这个就不太清楚了啊,可能支持bool吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-12 19:46:25 | 显示全部楼层
逍滛怪亾 发表于 2013-10-12 19:35
这个就不太清楚了啊,可能支持bool吧

但我贴的第二段代码可以在VC++6.0运行,第一段却不行。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-12 20:08:57 | 显示全部楼层
yuqiuwangzi 发表于 2013-10-12 19:46
但我贴的第二段代码可以在VC++6.0运行,第一段却不行。。。

这个。。。。就不太知道了,我原来在vc上编的dev用不了,你试一下大写的BOOL
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-12 20:17:09 | 显示全部楼层
逍滛怪亾 发表于 2013-10-12 20:08
这个。。。。就不太知道了,我原来在vc上编的dev用不了,你试一下大写的BOOL

木有作用,以后再研究吧。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-12 20:24:36 | 显示全部楼层
yuqiuwangzi 发表于 2013-10-12 19:00
--------------------Configuration: stack - Win32 Debug--------------------
Compiling...
stack.cp ...

stack.cpp
*.cpp 当然正常啊 这是C++啊
我说了C++是支持的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-14 19:41:38 | 显示全部楼层
学习,继续升级中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-4 02:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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