湘潭大学 数据结构实验3 实验报告 源代码 栈和队列.doc

湘潭大学 数据结构实验3 实验报告 源代码 栈和队列.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
“数据结构和算法II”课程实验报告 实验名称:栈和队列的综合应用 班级 姓名 学号 实验日期: 实验机时:2 学时 实验成绩: ------------------------------------------------------------------------------- 实验目的: 熟悉栈的定义和基本操作 熟悉队列的定义和基本操作 掌握递归和非递归算法的实现技术和实际应用 加深对栈结构的理解,培养解决实际问题的编程能力。 实验内容: (1)基本实验内容: 实现Hanoi 塔的问题; 完成迷宫问题或马踏棋盘问题求解。 程序及注释: Hanoi塔问题: typedef int ElementType; #ifndef _Stack_h #define _Stack_h struct Node; typedef struct Node *PtrToNode; typedef PtrToNode Stack; int IsEmpty( Stack S ); Stack CreateStack( void ); void DisposeStack( Stack S ); void MakeEmpty( Stack S ); void Push( ElementType X, Stack S ); ElementType Top( Stack S ); void Pop( Stack S ); #endif #include stdio.h #include stdlib.h #define Error( Str ) FatalError( Str ) #define FatalError( Str ) fprintf( stderr, %s\n, Str ), exit( 1 ) #include stdlib.h struct Node//定义栈的结构 {ElementType Element; PtrToNode Next; char bianhao;}; int IsEmpty( Stack S )//判断栈是否为空 {return S-Next == NULL;} Stack CreateStack()//创建一个空栈 {Stack S; S = malloc( sizeof( struct Node ) ); if( S == NULL ) FatalError( Out of space!!! ); S-Next = NULL; MakeEmpty( S ); return S;} void MakeEmpty( Stack S )//将栈置空 {if( S == NULL ) Error( Must use CreateStack first ); else while( !IsEmpty( S ) ) Pop( S );} Void DisposeStack( Stack S )//销毁栈 {MakeEmpty( S ); free( S );} void Push( ElementType X, Stack S )//向栈S中插入元素n {PtrToNode TmpCell; TmpCell = malloc( sizeof( struct Node ) ); if( TmpCell == NULL ) FatalError( Out of space!!! ); else {TmpCell-Element = X; TmpCell-Next = S-Next; S-Next = TmpCell;}} Void Pop( Stack S )//推出栈顶元素 {PtrToNode FirstCell; if( IsEmpty( S ) ) Error( Empty stack ); else {FirstCell = S-Next; S-Next = S-Next-Next; free( FirstCell );}} int c=0; void Move(Stack x,int n,Stack z)//将第编号为n的圆盘从x移动到z {Pop(x); Push(n,z); printf(%2d:将原盘 %d 从 %c 移动到 %c\n,++c,n,x-bianhao,z-bianhao);} void hanoi(int n,Stack x,Stack y,Stack z){if (n==1) Move(x,1,z); else {hanoi(n-1,x,z,y);//将编号为1到n-1

文档评论(0)

文档精品 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6203200221000001

1亿VIP精品文档

相关文档