要实现逆波兰表达式+高精度字符串的计算器,栈必不可少
C语言缺少各种数据结构库,于是写了一个栈
这里的ElemType是栈中元素的类型,我要存放的是长度很大的字符串指针,所以用的是char*
别的情形下更改,即可实现各种类型的栈
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#define stack_staIZE 500
typedef char* ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int size;
} stack;
void stack_init(stack *sta); //初始化栈
int stack_push(stack *sta,ElemType e);//push
int stack_pop(stack *sta);//pop
ElemType stack_top(stack *sta)
{
if(sta->base==sta->top) return NULL;//判断栈空
else return *(sta->top-1);
}
void stack_init(stack *sta)
{
sta->base=(ElemType *)malloc(stack_staIZE *sizeof(ElemType));
sta->top=sta->base;
sta->size=0;
}
int stack_push(stack *sta,ElemType e)
{
if(sta->top-sta->base==stack_staIZE) //判断栈满
return 0;
*(sta->top)=e;
sta->top++;
sta->size++;
return 1;
}
int stack_pop(stack *sta)
{
if(sta->base==sta->top)//判断栈空
return 0;
sta->top--;
sta->size--;
return 1;
}
int stack_size(stack *sta)
{
return sta->size;
}
int main()
{
stack s;
stack_init(&s);
char *p="hello cncalc";
stack_push(&s,"123");
stack_push(&s,p);
printf("%s %d\n",stack_top(&s),stack_size(&s));
stack_pop(&s);
printf("%s %d\n",stack_top(&s),stack_size(&s));
}