C++基础之用栈计算逆波兰式

    print?#include <stdio.h>

  #include <stdlib.h>

  #include <string.h>

  typedef struct Mystack *Stack;

  struct Mystack {

  int Capacity;       /* 栈的容量 */

  int Top_of_stack;   /* 栈顶下标 */

  int *Array;     /* 存放栈中元素的数组 */

  };

  /* 栈的创建 */

  Stack CreateStack(int Max)

  {

  Stack S;

  S = malloc(sizeof(struct Mystack));

  if (S == NULL)

  printf("Create stack error!\n");

  S->Array = malloc(sizeof(char) * Max);

  if (S->Array == NULL)

  printf("Create stack error!\n");

  S->Capacity = Max;

  S->Top_of_stack = 0;

  return S;

  }

  /* 释放栈 */

  void DisposeStack(Stack S)

  {

  if (S != NULL)

  {

free(S->Array);

  free(S);

  }

  }

  /* 判断一个栈是否是空栈 */

  int IsEmpty(Stack S)

  {

  return !S->Top_of_stack;

  }

  /* 判断一个栈是否满栈 */

  int IsFull(Stack S)

  {

  if (S->Top_of_stack == S->Capacity - 1)

  return 1;

  else

  return 0;

  }

  /* 数据入栈 */

  int Push(int x, Stack S)

  {

  if (IsFull(S))

  printf("The Stack is full!\n");

  else

  S->Array[S->Top_of_stack++] = x;

  }

  /* 数据出栈 */

  int Pop(Stack S)

  {

  if (IsEmpty(S))

  printf("The Stack is empty!\n");

  else

S->Top_of_stack--;

  }

  /* 将栈顶返回 */

  int Top(Stack S)

  {

  if (!IsEmpty(S))

  return S->Array[S->Top_of_stack-1];

  printf("The Stack is empty!\n");

  return 0;

  }

  int main()

  {

  int i, len, result;

  char str[100];

  printf("Please input the postfix that you want to compute: \n");

  scanf("%s", str);

  len = strlen(str);

  /* 根据序列的长度来创建栈 */

  struct Mystack *my_stack = CreateStack(len+1);

  for (i = 0; i < len; i++)

  {

  if (str[i] >= '0' && str[i] <= '9')

  Push((int)str[i]-48, my_stack);

  else if (str[i] == '+')

  {

 int x = Top(my_stack);

  Pop(my_stack);

  int y =Top(my_stack);

  Pop(my_stack);

  Push(x+y, my_stack);

  //printf("%d\n", Top(my_stack));

  }

  else if (str[i] == '-')

  {

  int x = Top(my_stack);

  Pop(my_stack);

  int y = Top(my_stack);

  Pop(my_stack);

  Push(x-y, my_stack);

  //printf("%d\n", Top(my_stack));

  }

  else if (str[i] == '*')

  {

  int x = Top(my_stack);

  Pop(my_stack);

  int y = Top(my_stack);

  Pop(my_stack);

  Push(x*y, my_stack);

  //printf("%d\n", Top(my_stack));

  }

  else if (str[i] == '/')

  {

  int x = Top(my_stack);

  Pop(my_stack);

  int y = Top(my_stack);

  Pop(my_stack);

  Push(x/y, my_stack);

  //printf("%d\n", Top(my_stack));

  }

  }

printf("The result is: %d\n", Top(my_stack));

  Pop(my_stack);

  /* A bug */

  //  DisposeStack(my_stack);

  return 0;

  }

  #include <stdio.h>

  #include <stdlib.h>

  #include <string.h>

  typedef struct Mystack *Stack;

  struct Mystack {

  int Capacity;       /* 栈的容量 */

  int Top_of_stack;   /* 栈顶下标 */

  int *Array;     /* 存放栈中元素的数组 */

  };

  /* 栈的创建 */

  Stack CreateStack(int Max)

  {

posted @ 2013-09-24 10:06  来自你520的末班车  阅读(1621)  评论(0编辑  收藏  举报