#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 10
struct Stack
{
char* base;
char* top;
int stacksize;
};
void InitStack(struct Stack &s) //构造一个空栈
{
s.base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
}
void Push(struct Stack &s,char e)//将栈内压入元素
{
if(s.top-s.base>=STACK_INIT_SIZE)
{
s.base=(char*)realloc(s.base,(s.stacksize+STACK_INCREMENT)*sizeof(char));
s.top=s.base+s.stacksize;
s.stacksize+=STACK_INCREMENT;
}
*(s.top)=e;
s.top++;
}
void Pop(struct Stack &s,char &e)//取出栈顶元素
{
e=*--s.top;
}
int StackEmpty(struct Stack s)//栈是否为空
{
if(s.top==s.base)
{
return 1;
}
else{
return 0;
}
}
void ClearStack(struct Stack &s){
s.top=s.base;
}
struct Queue{
char data;
struct Queue* next;
};
struct LinkQueue{
struct Queue* front;
struct Queue* rear;
};
void InitQueue(struct LinkQueue &q)//构造队
{
q.front=q.rear=(struct Queue*)malloc(sizeof(struct Queue));
q.front->next=NULL;
}
void EnQueue(struct LinkQueue &q,char e)//元素入队
{
struct Queue* p;