WEB开发网
开发学院软件开发数据结构 数据结构教程 第十七课 实验三:栈的表示与实现及... 阅读

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

 2007-05-16 11:56:25 来源:WEB开发网   
核心提示:二、栈的应用1、利用栈实现数制转换 2、利用栈实现单行编辑以上任选一题。数制转换示例#include<stdio.h>#include<malloc.h>#include<conio.h>typedef int SElemType;#include "stack.h&quo

二、栈的应用

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 !");
}

Tags:数据结构 教程 第十七

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接