(完整word版)数据结构栈求解迷宫问题C语言版.doc 立即下载
2024-09-09
约4.3千字
约16页
0
30KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

(完整word版)数据结构栈求解迷宫问题C语言版.doc

(完整word版)数据结构栈求解迷宫问题C语言版.doc

预览

免费试读已结束,剩余 11 页请下载文档后查看

5 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

(完整word版)数据结构栈求解迷宫问题C语言版
(完整word版)数据结构栈求解迷宫问题C语言版
(完整word版)数据结构栈求解迷宫问题C语言版
数据结构栈求解迷宫问题(C语言版)



/*
数据结构C语言版栈求解迷宫问题
P50-52利用栈求解迷宫问题
编译环境:Dev-C++4.9.9.2
日期:2011年2月12日
*/

/***************头文件**********************/

//迷宫坐标位置类型
typedefstruct	
{
intx;		//行值
inty;		//列值
}PosType;

#defineMAXLENGTH25//设迷宫的最大行列为25

typedefintMazeType[MAXLENGTH][MAXLENGTH];//迷宫数组[行][列]

typedefstruct//栈的元素类型
{
intord;//通道块在路径上的"序号"
PosTypeseat;//通道块在迷宫中的"坐标位置"
intdi;//从此通道块走向下一通道块的"方向"(0~3表示东~北)
}SElemType;


//全局变量
MazeTypem;//迷宫数组

intcurstep=1;//当前足迹,初值为1


#defineSTACK_INIT_SIZE10	//存储空间初始分配量

#defineSTACKINCREMENT2	//存储空间分配增量

//栈的顺序存储表示P46
typedefstructSqStack
{
SElemType*base;	//在栈构造之前和销毁之后,base的值为NULL
SElemType*top;		//栈顶指针
intstacksize;		//当前已分配的存储空间,以元素为单位
}SqStack;	//顺序栈


/****************实现************************/


//	构造一个空栈S
intInitStack(SqStack*S)
{
//为栈底分配一个指定大小的存储空间
(*S).base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!(*S).base)
exit(0);

(*S).top=(*S).base;	//栈底与栈顶相同表示一个空栈
(*S).stacksize=STACK_INIT_SIZE;

return1;
}

//若栈S为空栈(栈顶与栈底相同的),则返回1,否则返回0。
intStackEmpty(SqStackS)
{
if(S.top==S.base)
return1;
else
return0;
}

//	插入元素e为新的栈顶元素。
intPush(SqStack*S,SElemTypee)
{
if((*S).top-(*S).base>=(*S).stacksize)	//栈满,追加存储空间
{
(*S).base=(SElemType*)realloc((*S).base,
((*S).stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!(*S).base)
exit(0);

(*S).top=(*S).base+(*S).stacksize;
(*S).stacksize+=STACKINCREMENT;
}
*((*S).top)++=e;
//这个等式的++*优先级相同,但是它们的运算方式,是自右向左

return1;
}


//	若栈不空,则删除S的栈顶元素,用e返回其值,并返回1;否则返回0。
intPop(SqStack*S,SElemType*e)
{
if((*S).top==(*S).base)
return0;
*e=*--(*S).top;
//这个等式的++*优先级相同,但是它们的运算方式,是自右向左

return1;
}


//定义墙元素值为0,可通过路径为1,不能通过路径为-1,通过路径为足迹

//当迷宫m的b点的序号为1(可通过路径),return1;否则,return0。
intPass(PosTypeb)
{
if(m[b.x][b.y]==1)
return1;
else
return0;
}


//使迷宫m的a点的序号变为足迹(curstep),表示经过
voidFootPrint(PosTypea)
{
m[a.x][a.y]=curstep;
}


//根据当前位



置及移动方向,返回下一位置
PosTypeNextPos(PosTypec,intdi)
{
PosTypedirec[4]={{0,1},{1,0},{0,-1},{-1,0}};//{行增量,
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

(完整word版)数据结构栈求解迷宫问题C语言版

文档大小:30KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用