AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > 数据结构

数据结构教程 第十七课 实验三:栈的表示与实现及栈的应用

51自学网 http://www.51zixue.net

二、栈的应用

1、利用栈实现数制转换 2、利用栈实现单行编辑

以上任选一题。

数制转换示例

#include<stdio.h>#include<malloc.h>#include<conio.h>typedef int SElemType;#include "stack.h"Status visit(SElemType * e){  printf(" %d  ", *e);}void conversion(){ pSqStack S; SElemType e; int n; InitStack(&S); printf("Input a number to convert to OCT:/n"); scanf("%d",&n); if(n<0)   {     printf("/nThe number must be over 0.");     return;   } if(!n) Push(S,0); while(n){   Push(S,n%8);   n=n/8; } printf("the result is:        "); while(!StackEmpty(*S)){   Pop(S,&e);   printf("%d",e); }}main(){  printf("/n/n/n/n");  conversion();  getch();  printf("/n/nWelcome to visit http://zmofun.yeah.net !");}
单行编辑示例
#include<string.h>#include<stdio.h>#include<malloc.h>#include<conio.h>#define EOFILE '`'typedef char SElemType;#include "stack.h"Status visit(SElemType * e){  printf("%c", *e);}char OP[10]={'+','-','*','/','(',')','#'};int precede[7][7]={      1,1,2,2,2,1,1,      1,1,2,2,2,1,1,      1,1,1,1,2,1,1,      1,1,1,1,2,1,1,      2,2,2,2,2,3,0,      1,1,1,1,0,1,1,      2,2,2,2,2,0,3};int In(char c,char *op){  int i=0;  while(i<7)     if(c==op[i++])       return 1;  return 0;}char Precede(char op,char c){  int pos_op;  int pos_c;  int i;  for(i=0;i<7;i++)    {      if(op==OP[i]) pos_op=i;      if(c==OP[i]) pos_c=i;    }  switch(precede[pos_op][pos_c])    {      case 1:  return '>';      case 2:  return '<';      case 3:  return '=';    }}char Operate(int a,char theta,int b){  switch(theta)    {      case '+':return a+b-'0';      case '-':return a-b+'0';      case '*':return (a-'0')*(b-'0')+'0';      case '/':return (a-'0')/(b-'0')+'0';    }}char EvaluateExpression(){  SqStack *OPND,*OPTR;  char c,x,theta;  char a,b;  InitStack(&OPTR);  Push(OPTR,'#');  InitStack(&OPND);  c=getchar();  while(c!='#'||GetTop(*OPTR)!='#')    {      if(!In(c,OP))	{Push(OPND,c);c=getchar();}      else	switch(Precede(GetTop(*OPTR),c))	  {	    case '<':	      Push(OPTR,c);	      c=getchar();	      break;	    case '=':	      Pop(OPTR,&x);	      c=getchar();	      break;	    case '>':	      Pop(OPTR,&theta);	      Pop(OPND,&b);  Pop(OPND,&a);	      Push(OPND,Operate(a,theta,b));	      break;	  }    }  c=GetTop(*OPND);  DestroyStack(OPTR);  DestroyStack(OPND);  return c;}main(){  char i;  printf("/n/n/n/nOnly within 0..9 evaluation,input a expression end with symbol #:/n");  i=EvaluateExpression();  printf("/nThis expression's result is:   ");  printf("%d/n/n/n/n",i-'0');  printf("/n/nWelcome to visit http://zmofun.yeah.net !");}
 

 

 
 

上一篇:数据结构教程&nbsp;第十六课&nbsp;串操作应用举例  下一篇:数据结构教程&nbsp;第十八课&nbsp;数组的顺序表示与实现