1 / 11
文档名称:

第三章 栈与队列.doc

格式:doc   页数:11
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

第三章 栈与队列.doc

上传人:中国课件站 2011/10/11 文件大小:0 KB

下载得到文件列表

第三章 栈与队列.doc

文档介绍

文档介绍:第三章栈与队列

typedef struct{
                 Elemtype *base[2];
                 Elemtype *top[2];
               }BDStacktype; //双向栈类型
Status Init_Stack(BDStacktype &tws,int m)//初始化一个大小为m的双向栈tws
{
  [0]=(Elemtype*)malloc(sizeof(Elemtype));
  [1]=[0]+m;
  [0]=[0];
  [1]=[1];
  return OK;
}//Init_Stack
Status push(BDStacktype &tws,int i,Elemtype x)//x入栈,i=0表示低端栈,i=1表示高端栈
{
  if([0]>[1]) return OVERFLOW; //注意此时的栈满条件
  if(i==0) *[0]++=x;
  else if(i==1) *[1]--=x;
  else return ERROR;
  return OK;
}//push
Status pop(BDStacktype &tws,int i,Elemtype &x)//x出栈,i=0表示低端栈,i=1表示高端栈
{
  if(i==0)
  {
    if([0]==[0]) return OVERFLOW;
    x=*--[0];
  }
  else if(i==1)
  {
    if([1]==[1]) return OVERFLOW;
    x=*++[1];
  }
  else return ERROR;
  return OK;
}//pop

void Train_arrange(char *train)//这里用字符串train表示火车,'H'表示硬席,'S'表示软席
{
  p=train;q=train;
  InitStack(s);
  while(*p)
  {
    if(*p=='H') push(s,*p); //把'H'存入栈中
    else *(q++)=*p; //把'S'调到前部
    p++;
  }
  while(!StackEmpty(s))
  {
    pop(s,c);
    *(q++)=c; //把'H'接在后部
  }
}//Train_arrange

int IsReverse()//判断输入的字符串中'&'前和'&'后部分是否为逆串,是则返回1,否则返回0
{
  InitStack(s);
  while((e=getchar())!='&')
    push(s,e);
  while((e=getchar())!='@')
  {
    if(StackEmpty(s)) return 0;
    pop(s,c);
    if(e!=c) return 0;
  }
  if(!StackEmpty(s)) return 0;
  return 1;
}//IsReverse

Status Bracket_Test(char *str)//判别表达式中小括号是否匹配
{
  count=0;
  for(p=str;*p;p++)
  {
    if(*p=='(') count++;
    else if(*p==')') count--;
    if (count<0) return ERROR;
  }
  if(count) return ERROR; //注意括号不匹配的两种情况
&#160