堆栈(逆波兰)

#define  _CRT_SECURE_NO_WARNINGS
#pragma once
#include <cstdlib>
#include <cstring>
#include <cstdio>
typedef struct _ELEMENT
{
    int index;
    char name[8];
    _ELEMENT* next;
}ELEMENT;

typedef struct _STACK
{
    int size;
    ELEMENT* top;
}STACK;
//入栈
bool push(STACK* stack, ELEMENT element);
//出栈
bool pop(STACK* stack);
//ELEMENT* _pop(STACK* stack);
//元素数
int size(STACK stack);
//是否空栈
bool empty(STACK* stack);
//去头节点
ELEMENT* top(STACK stack);

//清空
void clear(STACK stack);
//打印
void show(STACK stack);
#include "Stack.h"

bool push(STACK* stack,ELEMENT element) 
{
    ELEMENT* node = (ELEMENT*)malloc(sizeof(ELEMENT));
    memset(node,0,sizeof(ELEMENT));
    node->index = element.index;
    strcpy(node->name, element.name);
    if (stack->top == NULL)
    {
        stack->top = node;
        node->next = NULL;
        return true;
    }
    else 
    {
        node->next=stack->top;      
        stack->top = node;
        return true;
    }
}
bool pop(STACK* stack)
{
    if (stack->top == NULL)
    {
        return true;
    }
    else
    {
        ELEMENT* p = NULL;
        p = stack->top;
        stack->top = stack->top->next;
        //free(p);
    }
    return false;
}
int size(STACK stack)
{   
    for (ELEMENT* p = stack.top;p!=NULL; p=p->next)
    {
        stack.size++;
    }
    printf("%d",stack.size);
    return stack.size;
}
bool empty(STACK* stack)
{
    if (stack->top == NULL)
    {
        printf("no\n");
        return true;
    }
    else
    {
        printf("  yes\n");
        return true;
    }
    return false;
}
ELEMENT* top(STACK stack)
{
    return stack.top;
}

void clear(STACK stack)
{
    for (ELEMENT* p=stack.top;p!=NULL;p= stack.top)
    {   
        stack.top = p->next;
        free(p);
    }
    printf("%d", stack.top);
    return;
}
void show(STACK stack)
{
    for (ELEMENT*p = stack.top; p != NULL;p = p->next)
    {
        printf("%d %s\n",p->index,p->name);
    }
    return;
}


//ELEMENT* _pop(STACK* stack) 
//{
//  ELEMENT* p = stack->top;
//  if (p != NULL)
//  {
//      stack->top = stack->top->next;
//      stack->size--;
//      return p;
//  }
//  return NULL;
//}
#include "Stack.h"

//void main()
//{
    //STACK stack = { 0 };

    //ELEMENT element = { 0 };
    //strcpy(element.name, "张三");
    //element.index = 5;

    //ELEMENT element1 = { 0 };
    //element1.index = 6;
    //strcpy(element1.name, "李四 ");

    //ELEMENT element2 = { 0 };
    //strcpy(element2.name, "王五");
    //element2.index = 3;
    //push(&stack, element);
    //push(&stack, element1);
    //push(&stack, element2);
    size(stack);
    pop(&stack);
    empty(&stack);
    top(stack);
    //show(stack);
    //clear(stack);
    //getchar();
//}


//字符串的截取
void  interce(ELEMENT* element)
{
    char src[] = { 0 };
    char str[32] = { 0 };
    char buffer[32] = { 0 };
    gets_s(src);
    char* p = strstr(src, ",");
    if (p != NULL)
    {
        int len = p - src;
        memcpy(str, src, len);
        memcpy(buffer, p + 1, strlen(str) - len - 1);
        strcpy(buffer, p + 1);
    }
}
void main()
{
    STACK stack = { 0 };
    ELEMENT element = { 0 };
    char arr[20] = { 0 };
    strcpy(element.name, arr);
    gets_s(arr);
    if (arr[0] < '/' && arr[0] < ':')
    {

    }
    strcpy(element.name, "arr");
    element.index = atoi(arr);
    push(&stack, element);
    show(stack);
    getchar();
}


//#define SHOW(f) \
//ELEMENT* p = _pop(stack); \
//ELEMENT* q = _pop(stack); \
//if (p == NULL){printf("表达式错误\n");return;}\
//if (q == NULL){printf("表达式错误\n");return;}\
//element.index = p->index ##f q->index; \
//printf("%d %s %d = %d\n", p->index, #f, q->index, element.index); \
//push(stack, element);

//void fun(STACK* stack, ELEMENT element, char* arrs)
//{
//  if (strrchr(arrs, ' ') == NULL) 
//  {
//      element.index = atoi(arrs);
//      push(stack, element);
//      return;
//  }
//  char* a = strrchr(arrs, ' ') + 1;
//  if (strcmp(a, "+") == 0 || strcmp(a, "-") == 0 || strcmp(a, "*") == 0 || strcmp(a, "/") == 0) {
//
//  }
//  else {
//      element.index = atoi(strrchr(arrs, ' ') + 1);
//  }
//  memset(strrchr(arrs, ' '), 0, 1);
//  fun(stack, element, arrs);
//  switch (*a)
//  {
//  case '+':
//  {
//      SHOW(+);
//      break;
//  }
//  case '-':
//  {
//      SHOW(-);
//      break;
//  }
//  case '*':
//  {
//      SHOW(*);
//      break;
//  }
//  case '/':
//  {
//      SHOW(/ );
//      break;
//  }
//  default:
//      push(stack, element);
//      break;
//  }
//}
//#undef SHOW;
//void main() {
//
//  /*ELEMENT elements1 = { 0 };
//  elements1.index = 1;
//  strcpy(elements1.name, "李四");
//
//  ELEMENT elements2 = { 0 };
//  elements2.index = 1;
//  strcpy(elements2.name, "王五");
//
//  push(&stack,elements);
//  push(&stack, elements1);
//  push(&stack, elements2);
//  pop(&stack);
//  pop(&stack);
//
//  show(stack);*/
//
//  STACK stack = { 0 };
//  ELEMENT elements = { 0 };
//  strcpy(elements.name, " ");
//
//  char arrs[128] = { 0 };
//  gets_s(arrs);
//  //printf("%s\n",arrs);
//  //printf("%s\n", arrs);
//  //printf("%c\n",atoi("+"));
//
//  fun(&stack, elements, arrs);
//  show(stack);
//
//  getchar();
//}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值