首页 > 代码库 > 栈

 #include<stdio.h>
 #include<stdlib.h>
 #include<malloc.h>
 #define STACK_INIT_SIZE 100
 #define STACKINCREMENT 10
 #define OVERFLOW -1
 #define OK 1
 #define ERROR 0
 typedef int Status;
 typedef int SElemType;
 typedef struct
 {
 	SElemType *base;
 	SElemType *top;
 	int stacksize;
 } SqStack;
 Status initStack(SqStack &s)
 {
 	int i;
 	SElemType *p;
 	s.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
 	if(!s.base)exit(OVERFLOW);
 	s.top = s.base;
 	p=s.base;
 	s.stacksize = STACK_INIT_SIZE; 	
 } 
 Status push(SqStack &s,SElemType e)
 {
 	int *p;
 	int *i;
 	if(s.top-s.base>=s.stacksize)
 	{
	 	s.base=(SElemType *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType));
	 	if(!s.base)exit(OVERFLOW);
	 	s.top=s.base+s.stacksize;
	 	s.stacksize+=STACKINCREMENT;
	 }
	 *s.top++=e;
	 
	 return OK;
 }
 Status pop(SqStack &s,SElemType &e)
 {
 	int *p,*i;
 	if(s.top==s.base)return ERROR;
 	e=*--s.top;
 	return OK;
 }
 Status getTop(SqStack s,SElemType &e)
 {
 	if(s.top==s.base)return ERROR;
 	e=*(s.top-1);
 	printf("%d",e);
 	return OK;
 }
 int main()
 {
 	SqStack s;
 	SElemType e;
 	
 	initStack(s);
 	
 	scanf("%d",&e);
 	push(s,e);
 	getTop(s,e);
 	pop(s,e);
 	
 }