以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  [原创]关于编译器的问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=54863)


--  作者:hinder
--  发布时间:11/4/2007 11:49:00 AM

--  [原创]关于编译器的问题
#include "stdio.h"
#define   TRUE  1
#define   MAXSIZE 50
typedef       int    datatype;  
typedef       struct    
{ datatype   stack[MAXSIZE]; 
   int top;    
} seqstack;          /* 顺序栈的类型定义 */
seqstack   *a;          /* a为顺序栈 */
void INITSTACK(seqstack *S)   
{     S->top=0;      /* 将顺序栈设置为空栈 */
}/* SEQSTACK_INITSTACK */
 /* 检查顺序栈是否为空栈运算 */
int  EMPTY(seqstack *S)  
{ if(S->top==0)      return (TRUE);    
  else                   return (NULL); 
}/* SEQSTACK_EMPTY */
seqstack *PUSH(seqstack *S, datatype x)
{ if(S->top>=MAXSIZE-1)    /* 检查顺序栈是否满 */
  { printf("栈满溢出错误!\n");
    return(NULL);    /* 若插入元素失败,则返回0 */
  }
  else
  {     /* 将栈顶指针加1使之指向空单元 */
    S->stack[S->top]=x;    /* 将新结点插入栈顶 */
 S->top++;}
  return(S);  /* 插入成功则函数返回新栈顶指针 */
}/* SEQSTACK_PUSH */
datatype POP(seqstack *S)    
{ datatype x;       /* 保存栈顶元素数据值 */
  if  (EMPTY(S))                /* 检查顺序栈是否为空 */
  { printf("下溢错误! ");
     return(NULL);       /* 若删除失败返回0 */
   }
  else                          /* 若顺序栈非空删除之*/
   { S->top--;
     x=S->stack[S->top];    /* 暂存栈顶元素 */
     return (x);     
    }
    }/* SEQSTACK_POP */
datatype    gettop_seqstack(seqstack *S)
{  if  (EMPTY(S))
   {  printf("栈是空栈! ");
       return(NULL);    
    }
   else  return(S->stack[S->top]); 
}/* SEQSTACK_GETTOP */

main()       /* 从键盘输入一批正整数,然后按相反次序输出程序 */
{ int x, n=0;  /* x保留栈顶元素的数据值,n统计输入数据的个数 */
  INITSTACK(a);   /* 将顺序栈初始化置空 */
  printf("\nPlease input data with 0 as a end:\n\n");
  scanf("%d", &x);  /* 输入第一个正整数 */
  while(x!=0)  /* 输入正整数,以-1作为结束标志 */
  { a=PUSH(a, x);  /* 将输入正整数顺序进栈 */
    n++;    scanf("%d", &x); } /* 继续输入下一个正整数 */
    printf("n=%d\n", n); /* 统计输入正整数的个数 */
    while(EMPTY(a)!=1) /* 若栈非空,则依次退栈输出整数 */
    { x=POP(a);  /* 将栈顶元素顺序出栈保存到x中 */
      printf("%d  ", x); /* 打印输出栈顶元素的数据值 */
      n--;  }
   printf("n=%d\n", n);       getchar();
}/* MAIN */
这段代码可以在tc2.0上调试通过,但不能在vc6.0上调试通过是为什么。请各位高手指点,小弟不胜感激。


--  作者:一分之千
--  发布时间:11/4/2007 9:02:00 PM

--  
#include "stdio.h"
#define   TRUE  1
#define   MAXSIZE 50
typedef       int    datatype;  
typedef       struct     
{ datatype   stack[MAXSIZE];
int top;    
} seqstack;          /* 顺序栈的类型定义 */
seqstack   *a;          /* a为顺序栈 */
void INITSTACK(seqstack *S)   
{     S->top=0;      /* 将顺序栈设置为空栈 */
}/* SEQSTACK_INITSTACK */
/* 检查顺序栈是否为空栈运算 */
int  EMPTY(seqstack *S)  
{ if(S->top==0)      return (TRUE);    
else                   return (NULL);
}/* SEQSTACK_EMPTY */
seqstack *PUSH(seqstack *S, datatype x)
{ if(S->top>=MAXSIZE-1)    /* 检查顺序栈是否满 */
{ printf("栈满溢出错误!\n");
return(NULL);    /* 若插入元素失败,则返回0 */
}
else
{     /* 将栈顶指针加1使之指向空单元 */
    S->stack[S->top]=x;    /* 将新结点插入栈顶 */
 S->top++;}
return(S);  /* 插入成功则函数返回新栈顶指针 */
}/* SEQSTACK_PUSH */
datatype POP(seqstack *S)     
{ datatype x;       /* 保存栈顶元素数据值 */
if  (EMPTY(S))                /* 检查顺序栈是否为空 */
{ printf("下溢错误! ");
return(NULL);       /* 若删除失败返回0 */
}
else                          /* 若顺序栈非空删除之*/
{ S->top--;
x=S->stack[S->top];    /* 暂存栈顶元素 */
return (x);     
}
}/* SEQSTACK_POP */
datatype    gettop_seqstack(seqstack *S)
{  if  (EMPTY(S))
{  printf("栈是空栈! ");
return(NULL);    
}
else  return(S->stack[S->top]);
}/* SEQSTACK_GETTOP */

=======================================
VC++需要对Main函数设置函数类型,此处可以设置为void
===========================================

void main()       /* 从键盘输入一批正整数,然后按相反次序输出程序 */
{
 int x, n=0;  /* x保留栈顶元素的数据值,n统计输入数据的个数 */

===================================
在使用一个类指针之前需要分配内存
============================
 a= new seqstack;


 INITSTACK(a);   /* 将顺序栈初始化置空 */
 printf("\nPlease input data with 0 as a end:\n\n");
 scanf("%d", &x);  /* 输入第一个正整数 */
 while(x!=0)  /* 输入正整数,以-1作为结束标志 */
 { a=PUSH(a, x);  /* 将输入正整数顺序进栈 */
    n++;    scanf("%d", &x); } /* 继续输入下一个正整数 */
    printf("n=%d\n", n); /* 统计输入正整数的个数 */
    while(EMPTY(a)!=1) /* 若栈非空,则依次退栈输出整数 */
    { x=POP(a);  /* 将栈顶元素顺序出栈保存到x中 */
 printf("%d  ", x); /* 打印输出栈顶元素的数据值 */
 n--;  }
 printf("n=%d\n", n);       getchar();
}/* MAIN */



--  作者:hinder
--  发布时间:11/4/2007 10:11:00 PM

--  
感谢这位仁兄,但还是不能编译通过。另外 seqstack *a对 a早有定义了
--  作者:卷积内核
--  发布时间:11/5/2007 8:34:00 AM

--  
以下是引用hinder在2007-11-4 22:11:00的发言:
感谢这位仁兄,但还是不能编译通过。另外 seqstack *a对 a早有定义了

一分之千正解,编译及运行都没有问题啊。

seqstack *a对 a早有定义,但没有分配空间,在VC中是不允许的,但C中可以运用时分配。


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms