鱼C论坛

 找回密码
 立即注册
查看: 3507|回复: 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类型,但是可以成功编译运行。。。
  1. # include <stdio.h>
  2. # include <malloc.h>
  3. # include <stdlib.h>

  4. typedef struct Node
  5. {
  6.         int data;
  7.         struct Node * pNext;
  8. }NODE, * PNODE;

  9. typedef struct Stack
  10. {
  11.         PNODE pTop;
  12.         PNODE pBottom;
  13. }STACK, * PSTACK;  //PSTACK 等价于 struct STACK *

  14. void init(PSTACK);
  15. void push(PSTACK, int );
  16. void traverse(PSTACK);
  17. bool pop(PSTACK, int *);
  18. void clear(PSTACK pS);

  19. int main(void)
  20. {
  21.         STACK S;  //STACK 等价于 struct Stack
  22.         int val;

  23.         init(&S);  //目的是造出一个空栈
  24.         push(&S, 1); //压栈
  25.         push(&S, 2);
  26.         push(&S, 3);
  27.         push(&S, 4);
  28.         push(&S, 5);
  29.         push(&S, 6);
  30.         traverse(&S); //遍历输出
  31.        
  32.         clear(&S);
  33.         //traverse(&S); //遍历输出

  34.         if ( pop(&S, &val) )
  35.         {
  36.                 printf("出栈成功,出栈的元素是%d\n", val);
  37.         }
  38.         else
  39.         {
  40.                 printf("出栈失败!\n");
  41.         }

  42.         traverse(&S); //遍历输出

  43.         return 0;
  44. }

  45. void init(PSTACK pS)
  46. {
  47.         pS->pTop = (PNODE)malloc(sizeof(NODE));
  48.         if (NULL == pS->pTop)
  49.         {
  50.                 printf("动态内存分配失败!\n");
  51.                 exit(-1);
  52.         }
  53.         else
  54.         {
  55.                 pS->pBottom = pS->pTop;
  56.                 pS->pTop->pNext = NULL; //pS->Bottom->pNext = NULL;
  57.         }
  58. }

  59. void push(PSTACK pS, int val)
  60. {
  61.         PNODE pNew = (PNODE)malloc(sizeof(NODE));
  62.        
  63.         pNew->data = val;
  64.         pNew->pNext = pS->pTop; //pS->Top不能改成pS->Bottom
  65.         pS->pTop = pNew;

  66.         return;
  67. }

  68. void traverse(PSTACK pS)
  69. {
  70.         PNODE p = pS->pTop;

  71.         while (p != pS->pBottom)
  72.         {
  73.                 printf("%d  ", p->data);
  74.                 p = p->pNext;
  75.         }
  76.         printf("\n");

  77.         return;
  78. }

  79. bool empty(PSTACK pS)
  80. {
  81.         if (pS->pTop == pS->pBottom)
  82.                 return true;
  83.         else
  84.                 return false;
  85. }

  86. //把pS所指向的栈出栈一次,并把出栈的元素存入pVal形参所指向的变量中,如果出栈失败,返回false,否则返回true
  87. bool pop(PSTACK pS, int * pVal)
  88. {
  89.         if ( empty(pS) ) //pS本身存放的就是S的地址
  90.         {
  91.                 return false;
  92.         }
  93.         else
  94.         {
  95.                 PNODE r = pS->pTop;
  96.                 *pVal = r->data;
  97.                 pS->pTop = r->pNext;
  98.                 free(r);
  99.                 r = NULL;

  100.                 return true;
  101.         }
  102. }

复制代码
想知道小甲鱼最近在做啥?请访问 -> 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++才有 可以加
  1. #define bool int
  2. #define true 1
  3. #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-4-19 04:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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