栈的应用举例

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

内容:数据结构实验报告课程:数据结构

班级:13物联网工程

姓名:* * *

学号:-----------------

日期:2014.10.21

实验目的:

1.熟悉C语言的基本编程方法,掌握集成编译环境的调试方法。

2.学习栈的使用方法。

3.掌握栈操作的实现方法。

4.学习使用栈解决实际问题的能力。

实验内容:

利用栈完成:1.数制转换

2.括号匹配的检验

3.行编辑程序

4.迷宫求解

5.表达式求解

五大功能模块。

**********基本操作的函数原型说明**********

Status InitStack(SqStack &s);

//构造一个空栈S

Status Destory(SqStack &s);

//销毁栈S,S不再存在

Status ClearStack(SqStack &s);

//把栈设置为空

Status StackEmpty(SqStack &s) ;

//判断栈是否为空

int StackLength(SqStack &s)

//返回栈的长度

Status GetTop(SqStack &s,SElemType &e);

//若栈不空,则用e返回S的栈顶元素,并返回OK。否则返回ERROR Status Push(SqStack &s,SElemType e)

//插入元素e为新的栈顶元素

Status Pop(SqStack &s,SElemType &e)

//若栈不空,则删除s的栈顶元素,用e返回其值,并返回ok;否则返回error

Status StackTraverse(SqStack S,Status(*visit)(SElemType))

//从栈底到栈顶依次对栈中每个元素调用函数visit()。

一旦visit()失败,则操作失败

核心代码:

数制转换:

void S_B()

{

int n;

SqStack S;

InitStack(S);

printf("请输入十进制整数n:");

scanf("%d",&n);

SElemType e;

while (n>0)

{

Push(S, n % 8);

n = n/8;

}

printf("该数的八进制数:");

while (!StackEmpty(S))

{

Pop(S,e);

printf("%d",e);

}

printf("\n");

}

括号的匹配检验:

Status EnterString(SqStack &s)

{

SElemType e;

while (1)

{

scanf("%c",&e);

if(e=='('||e=='['||e=='{')

Push(s,e);

else if(e==')'||e==']'||e=='}')

{

if(!Check(s,e))

{

return FALSE;

break;

}

}

else if(e!='\n')

{

x=1;

return FALSE;

break;

}

else

break;

}

}

行编辑程序:

void LineEdit()

{ // 利用字符栈s,从终端接收一行并送至调用过程的数据区。

char ch,c;

SqStack s;

InitStack(s);

InitStack(s);

printf(" 欢迎进入行编辑模块\n");

printf(" '#'为退格符\n");

printf(" '@'表示当前行中字符均无效\n\n");

printf(" 请输入字符:\n");

ch=getchar();

while(ch!=EOF)

{

while(ch!='\n')

{

switch(ch)

{

case '#':Pop(s,c);

break; // 仅当栈非空时退栈

case '@':ClearStack(s);

break; // 重置s为空栈

default :Push(s,ch); // 有效字符进栈

}

ch=getchar(); // 从终端接收下一个字符

}

StackTraverse(s,visit); // 将从栈底到栈顶的栈内字符输出

ClearStack(s); // 重置s为空栈

if(ch !=EOF)

ch = getchar();

}

Destory(s);

}

迷宫求解:

Status MazePath(int maze[12][12],SqStack1 &S, PosType start, PosType end) {

PosType curpos;

int curstep;

SET e;

InitStack(S);

curpos = start;

curstep = 1;

do {

if (Pass(maze,curpos))

{

Markfoot(maze,curpos);

e.di =1;

e.ord = curstep;

e.seat= curpos;

Push1(S,e);

if (curpos.row==end.row && curpos.line==end.line)

return OK;

curpos = NextPos(curpos, 1);

curstep++;

}

else

{

if (!StackEmpty(S))

{

Pop1(S,e);

while (e.di==4 && !StackEmpty(S))

{

Markfoot(maze,e.seat);

Pop1(S,e);

}

if (e.di<4)

{

e.di++;

Push1(S, e);

相关文档
最新文档