- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构C语言版_非循环顺序队列求解迷宫问题
/*
数据结构C语言版 非循环顺序队列求解迷宫问题
利用非循环顺序队列采用广度有哪些信誉好的足球投注网站法求解迷宫问题(一条路径)
编译环境:Dev-C++ 4.9.9.2
日期:2011年2月12日
*/
#include stdio.h
#include malloc.h
#define M 5 // 迷宫行数(包括外墙)
#define N 5 // 迷宫列数(包括外墙)
#define D 4 // 移动方向数,只能取4和8。(8个,可斜行;4个,只可直走)
// 移动数组,移动方向由正东起顺时针转
struct
{
int x,y;
#if D==8
}move[D]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};
#endif
#if D==4
}move[D]={{0,1},{1,0},{0,-1},{-1,0}};
#endif
// 定义栈元素类型和队列元素类型,两者为相同类型。
typedef struct
{
int x,y; // 当前点的行值,列值
int pre; // 前一点在队列中的序号
} SElemType, QElemType;
#define STACK_INIT_SIZE 10 // 存储空间初始分配量
#define STACKINCREMENT 2 // 存储空间分配增量
// 栈的顺序存储表示 P46
typedef struct SqStack
{
SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL
SElemType *top; // 栈顶指针
int stacksize; // 当前已分配的存储空间,以元素为单位
}SqStack; // 顺序栈
// 顺序队列(非循环,因为是非循环的,所以需要判断是否溢出
#define MAXQSIZE 5 // 最大队列长度(对于循环队列,最大队列长度要减1)
typedef struct
{
QElemType *base;// 初始化的动态分配存储空间 相当于一个数组
// 头指针,若队列不空,指向队列头元素,相当于一个数组下标
int front;
// 尾指针,若队列不空,指向队列尾元素的下一个位置 相当于一个数组下标
int rear;
}SqQueue;
// 构造一个空队列Q
int InitQueue(SqQueue *Q)
{
//分配定长的空间,相当于一个数组
(*Q).base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType));
if(!(*Q).base) // 存储分配失败
exit(0);
(*Q).front=(*Q).rear=0; //初始化下标
return 1;
}
// 销毁队列Q,Q不再存在
int DestroyQueue(SqQueue *Q)
{
if((*Q).base)
free((*Q).base);
(*Q).base=NULL;
(*Q).front=(*Q).rear=0;
return 1;
}
// 若队列Q为空队列,则返回1,否则返回0
int QueueEmpty(SqQueue Q)
{
if(Q.front==Q.rear) // 队列空的标志
return 1;
else
return 0;
}
// 插入元素e为Q的新的队尾元素
int EnQueue(SqQueue *Q,QElemType e)
{
if((*Q).rear=MAXQSIZE)
{ // 队列满,增加1个存储单元
(*Q).base=(QElemType *)realloc((*Q).base,
((*Q).rear+1)*sizeof(QElemType));
if(!(*Q).base) // 增加单元失败
return 0;
}
*((*Q).base+(*Q).rear)=e;
(*Q).rear++;
return 1;
}
// 若队列不空,则删除Q的队头元素,用e返回其值,并返回1,否则返回0
int DeQueue(SqQueue *Q,QElemType *e)
{
if((*Q).front==(*Q).rear) // 队列空
return 0;
*e=(*Q).base[(*Q).front];
(*Q).front=(*Q).front+1;
return 1;
}
// 构造一个空栈S。
int InitStack(SqStack *S)
{
// 为栈底分配一个指定
您可能关注的文档
- 房屋建筑和市政工程施工招标投标文件(样本).doc
- 手工木工高级技师理论知识试卷2.doc
- 我国物流业“十二五”发展回顾与“十三五”展望16.1.18.doc
- 手影全集(很难找哦).doc
- 手推式电动清扫车毕业设计论文(可编辑).doc
- 手持式指针式万用表MF-47和指针试万用表价格.docx
- 手术室相关工作制度(全)[课件资料].doc
- 托福官方指南第三版The Official Guide to the TOEFL Test Third Edition(可编辑).doc
- 技师论文(S6072锁体固定面板组件焊接夹具的设计)2011.06.01.doc
- 投资国际建材城建设项目可行性分析报告WORD可编辑版.doc
文档评论(0)