首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

新手有关问题,帮忙解释一下

2012-02-07 
新手问题,帮忙解释一下#includestdlib.h/*For_MAX_PATHdefinition*/#includestdio.h#includemalloc.h

新手问题,帮忙解释一下
#include   <stdlib.h>                   /*   For   _MAX_PATH   definition   */
#include   <stdio.h>
#include   <malloc.h>
#include   <string.h>
#include   <conio.h>


#define   STACK_INIT_SIZE   100         ?请问这是定义什么的
#define   STACKINCREMENT   10


struct   SqStack           ?请问这是定义什么的
{
  char   *base;
  char   *top;
  int   stacksize;
};

void   InitStack(SqStack   &S)                       ?请问这是跟类有关的呀,&S表示什么呀?
{
  S.base=(char*)malloc(STACK_INIT_SIZE   *sizeof(char));             ?请问等号后面表示什么意思呀?
  if   (!S.base)
    exit(1);               这个是不是表示退出模式,是什么呀?
  S.top=S.base;
  S.stacksize=STACK_INIT_SIZE;
}

void   push(SqStack   &S,char   e)                         这是不是表示没有返回值的函数啊,然后后面的刮号里是什么意思啊?
{
  if(S.top-S.base> =S.stacksize)
  {
    S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));请问realloc是什么作用呀?
    if   (!S.base)
      exit(1);
    S.top=S.base+S.stacksize;
    S.stacksize+=STACKINCREMENT;
  }
  *S.top++=e;
}

char   pop(SqStack   &S,char   &e)
{

  if   (S.top==S.base)
            return   false;
  e=*--S.top;
  return   e;
}

void   ClearStack(SqStack   &S)
{
  S.top=S.base;
}

void   DestroyStack(SqStack   &S)
{
  free(S.base);
  S.top=S.base;
}

bool   StackEmpty(SqStack   &S)
{
  if   (S.top==S.base)
    return   true;
  return   false;
}

/*void   PrintStack(SqStack   &S)
{
  char   e;
  while   (!StackEmpty(S))
  {
    pop(S,e);
    printf( "%d ",e);
  }
}*/

void   main()
{
  char   ch,e;
  SqStack   S,D;
  InitStack(S);
  InitStack(D);
  ch=getchar();
  while   (ch!=EOF)
  {
    while(ch!=EOF&&ch!= '\n ')
    {
      switch(ch)
      {
      case '# ':pop(S,e);break;
      case '@ ':ClearStack(S);break;
      default:push(S,ch);break;
      }
      ch=getchar();
    }
    while   (!StackEmpty(S))
    {
      e=pop(S,e);
      push   (D,e);
     
    }
    while   (!StackEmpty(D))
    {
      e=pop(D,e);
      printf( "%c ",e);
    }
    ClearStack(S);
    if(ch!=EOF)
      ch=getchar();


  }
  DestroyStack(S);
}



[解决办法]
#include <stdlib.h> /* For _MAX_PATH definition */
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <conio.h>


#define STACK_INIT_SIZE 100 定义栈的初始长度
#define STACKINCREMENT 10


struct SqStack 定义栈的结构体类型,包含二指针和一整型
{
char *base;
char *top;
int stacksize;
};

void InitStack(SqStack &S) 这里跟类没关系,是栈的初始化函数,&S表示参数为引用
{
S.base=(char*)malloc(STACK_INIT_SIZE *sizeof(char)); 申请STACK_INIT_SIZE块内存(连续的),每块大小sizeof(char),并使S.base指向其首地址
if (!S.base)
exit(1); 中止程序函数, exit(0) 正常中止,非0为异常中止
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
}

void push(SqStack &S,char e) 没有返回值的入栈函数
{
if(S.top-S.base> =S.stacksize)
{
S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));当栈满了还需要入栈时,再增加分配STACKINCREMENT块连续内存,每块大小sizeof(char),是和以前申请的内存连在一起的
if (!S.base)
exit(1);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
}

热点排行