C堆栈实现的表达式求值

//Luangeng
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#define SIZE 100
char t[10][14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,0,1,1,1,0,1,1,1,1,1,0,
0,1,1,1,1,0,1,1,1,0,1,0,1,0,
0,0,0,1,0,0,1,0,1,0,0,1,1,0,
0,1,1,1,1,1,0,1,0,1,1,0,1,0,
0,1,0,1,0,1,0,1,1,1,0,1,0,0,
0,1,1,0,1,0,1,0,0,1,1,0,1,0,
0,1,0,1,1,1,0,1,1,1,1,1,0,0,
0,1,1,1,0,1,1,1,0,1,0,1,1,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0};
typedef struct { short x,y; short d; } step;
typedef struct { step *top,*base; } stack;
void gotoxy(int x,int y)
{
COORD cd;
cd.X = x;
cd.Y = y;
HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hout,cd);
}
void creat(stack *s)
{ s->base=(step *)malloc(SIZE*sizeof(step));
s->top=s->base;
if(!s->base) printf("failed !\n");
}
void push(stack *s,short a,short b,short c)
{ if(s->top>=(s->base+SIZE))
printf("stack full !..........");
else
{ s->top++;
s->top->x=a;
s->top->y=b;
s->top->d=c;
gotoxy(b,a);
printf("%c",1);
}
}
void pop(stack *s)
{ if(s->base==s->top) printf("\nunderflow....\n");
else { gotoxy(s->top->y,s->top->x); printf(" "); s->top--; }
}
int main()
{ stack path;
short i,j,k;
creat(&path);
for(i=1;i<=10;i++)
for(j=1;j<=14;j++)
{
gotoxy(j,i);
if(t[i-1][j-1]==0)
printf("%s","#");
else printf(" ");
}
k=1;
push(&path,2,2,4); t[1][1]=-1;
while(!(path.top->x==9&&path.top->y==13))
{ switch(path.top->d)
{
case 4:
path.top->d--;
if(t[path.top->x-2][path.top->y-1]==1)
{
t[path.top->x-2][path.top->y-1]=-1;
push(&path,path.top->x-1,path.top->y,4); k++;
}
break;
case 3:
path.top->d--;
if(t[path.top->x-1][path.top->y]==1)
{ t[path.top->x-1][path.top->y]=-1;
push(&path,path.top->x,path.top->y+1,4); k++;
}
break;
case 2:
path.top->d--;
if(t[path.top->x][path.top->y-1]==1)
{ t[path.top->x][path.top->y-1]=-1;
push(&path,path.top->x+1,path.top->y,4); k++;
}
break;
case 1:
path.top->d--;
if(t[path.top->x-1][path.top->y-2]==1)
{ t[path.top->x-1][path.top->y-2]=-1;
push(&path,path.top->x,path.top->y-1,4); k++;
}
break;
case 0: pop(&path); k--; break;
}
if(path.top==path.base)
{ gotoxy(17,1);
printf("No way out !!");
break;
}
sleep(5);
gotoxy(17,10); printf("step=%d; ",k);
}
system("pause");
}

  

C堆栈的更多相关文章

  1. 谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  2. History API与浏览器历史堆栈管理

    移动端开发在某些场景中有着特殊需求,如为了提高用户体验和加快响应速度,常常在部分工程采用SPA架构.传统的单页应用基于url的hash值进行路由,这种实现不存在兼容性问题,但是缺点也有--针对不支持o ...

  3. JVM学习(2)——技术文章里常说的堆,栈,堆栈到底是什么,从os的角度总结

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 堆栈是栈 JVM栈和本地方法栈划分 Java中的堆,栈和c/c++中的堆,栈 数据结构层面的堆,栈 os层面 ...

  4. arcgis engine 中出现的内存堆栈溢出问题。

    两种解决方案: 1.循环加载mxd文档的时候出现的堆栈溢出,解决办法是每次循环结束时清空FeatureLayer,感觉并不好,但是确实可以实现功能. 2.循环调取featureclass的search ...

  5. java 堆栈 理解

    Java 中的堆和栈 堆和栈:分为数据结构的堆和栈以及内存中的堆和栈,两种理解应区分开. 数据结构中的堆: 堆实际上指的就是(满足堆性质的)优先队列的一种数据结构,第1个元素有最高的优先权. 堆性质: ...

  6. python列表模拟堆栈和队列

    对列特点:先进先出.后进后出 用列表insert.pop模拟进队出队: >>> l = [] >>> l.insert(0,'p1') >>> l ...

  7. GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 分析过程 这是我的C源文件:click here 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb ...

  8. 20145212——GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 测试代码 #include <stdio.h> short val = 1; int vv = 2; int g(int xxx) { return xxx + ...

  9. C和指针 第十七章 经典数据类型 堆栈 队列 二叉树

    堆栈: // // Created by mao on 16-9-16. // #ifndef UNTITLED_STACK_H #define UNTITLED_STACK_H #define TR ...

  10. gdb调试汇编堆栈过程的学习

    gdb调试汇编堆栈过程的学习 以下为C源文件 使用gcc - g code.c -o code -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器: 进入之 ...

随机推荐

  1. ios pyudaren

    ed2k://|file|%E9%A1%B9%E7%9B%AE%E6%8D%95%E9%B1%BC%E8%BE%BE%E4%BA%BA01.rmvb|67044010|9e013987298d7900 ...

  2. paper 92:图像视觉博客资源2之MIT斯坦福CMU

    收录的图像视觉(也包含机器学习等)领域的博客资源的第二部分,包含:美国MIT.斯坦福.CMU三所高校 1)这些名人大家一般都熟悉,本文仅收录了包含较多资料的个人博客,并且有不少更新,还有些名人由于分享 ...

  3. MySQL的基本函数

    charset(str) //返回字串字符集 mysql> select charset('demacia'); +--------------------+ | charset('demaci ...

  4. JS中数组的操作

    1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...

  5. 四种MySQL存储引擎

    前言 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎,还可以 ...

  6. 1行代码,删除svn文件夹

    引用:http://www.cnblogs.com/Alexander-Lee/archive/2010/02/23/1671905.html linux操作系统: find -name .svn | ...

  7. JavaScript:九种弹出对话框

    [1.最基本的js弹出对话框窗口代码] 这是最基本的js弹出对话框,其实代码就几句非常简单: <script LANGUAGE="javascript"> <!- ...

  8. ansible

    3.1 配置 #vim /etc/ansible/hosts       //定义主机,支持IP和域名,支持分组 [local] 127.0.0.1 [nginx] 192.168.0.10     ...

  9. 11、Jsp加强/EL表达式/jsp标签

    1 Jsp基础回顾 Jsp基础 1)Jsp的执行过程 tomcat服务器完成:jsp文件->翻译成java文件->编译成class字节码文件-> 构造类对象-> 调用方法 to ...

  10. asp.net中调用javascript自定义函数的方法(包括引入JavaScript文件)总结

    通常javascript代码可以与HTML标签一起直接放在前 端页面中,但如果JS代码多的话一方面不利于维护,另一方面也对搜索引擎不友好,因为页面因此而变得臃肿:所以一般有良好开发习惯的程序员都会把 ...