下面都是栈和队列的基本操作,没有什么实例,但基础最重要嘛,呵呵……
基本操作描述:
- #define STACK_INIT_SIZE 100
- #define STACKINCREMENT 10
- typeof struct
- {
- int *base;
- int *top;
- int stacksize=10;
- }SqStack;
初始化:
- void InitStack(SqStack &A)
- {
- S.base=(int *)malloc (STACK_INIT_SIZE*sizeof(int);
- if(!S.base)exit(OVERFLOW);
- S.top=S.base;
- S.stacksize=STACK_INIT_SIZE;
- }
获得栈顶元素:
- void GetTop(SqStack S,int &e)
- {
- //用e返回栈顶元素;
- if(S.top==S.base)return ERROR;
- e=*(S.top-1);//我想能不能用 e=*--S.top
- }
压栈(入栈):
- void Push(SqStack &S,int e)
- {
- if((S.top-S.base)>=S.stacksize)//栈满,追加存储空间
- {
- S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
- if(!S.base)exit(OVERFLOW);
- S.top=S.base+S.stacksize;
- S.stacksize+=STACKCREMENT;
- }
- *S.top++=e;
- }
出栈:
- void Pop(SqStack &S,int &e)
- {
- if(S.top==S.base)return ERROR;
- e=*--S.top;
- }