清华大学严蔚敏数据结构课后习题答案 第三章(栈与队列)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

清华大学严蔚敏数据结构课后习题答案第三章(栈与队列) [引用2009-10-23

21:22:35]

主人:孤独追梦字号:大中小3.15

typedef struct{

Elemtype *base[2];

Elemtype *top[2];

}BDStacktype; //双向栈类型

Status Init_Stack(BDStacktype &tws,int m)//初始化一个大小为m的双向栈tws {

tws.base[0]=(Elemtype*)malloc(sizeof(Elemtype));

tws.base[1]=tws.base[0]+m;

tws.top[0]=tws.base[0];

tws.top[1]=tws.base[1];

return OK;

}//Init_Stack

Status push(BDStacktype &tws,int i,Elemtype x)//x入栈,i=0表示低端栈,i=1表示高端栈

{

if(tws.top[0]>tws.top[1]) return OVERFLOW; //注意此时的栈满条件

if(i==0) *tws.top[0]++=x;

else if(i==1) *tws.top[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(tws.top[0]==tws.base[0]) return OVERFLOW;

x=*--tws.top[0];

}

else if(i==1)

{

if(tws.top[1]==tws.base[1]) return OVERFLOW;

x=*++tws.top[1];

}

else return ERROR;

return OK;

}//pop

3.16

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

3.17

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

3.18

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; //注意括号不匹配的两种情况

return OK;

}//Bracket_Test

3.19

Status AllBrackets_Test(char *str)//判别表达式中三种括号是否匹配

{

InitStack(s);

for(p=str;*p;p++)

{

if(*p=='('||*p=='['||*p=='{') push(s,*p);

else if(*p==')'||*p==']'||*p=='}')

{

if(StackEmpty(s)) return ERROR;

pop(s,c);

if(*p==')'&&c!='(') return ERROR;

if(*p==']'&&c!='[') return ERROR;

if(*p=='}'&&c!='{') return ERROR; //必须与当前栈顶括号匹配

}

}//for

if(!StackEmpty(s)) return ERROR;

return OK;

}//AllBrackets_Test

3.20

typedef struct {

. int x;

int y;

} coordinate;

void Repaint_Color(int g[m][n],int i,int j,int color)//把点(i,j)相邻区域的颜色置换为color

{

old=g[i][j];

InitQueue(Q);

EnQueue(Q,{I,j});

while(!QueueEmpty(Q))

{

DeQueue(Q,a);

x=a.x;y=a.y;

相关文档
最新文档