#include #define STACK_INIT_SIZE 100 //初始化分配大小
#define STACK_INCREMENT_SIZE 10 //增加分配大小
typedef int ElemType;
typedef struct{
ElemType *base; //栈底指针(存储空间首地址)
ElemType *top; //栈顶指针
int stacksize;//顺序存储空间的大小
}OrderStack;
int InitStack(OrderStack &s);//初始化栈(构建一个空栈)
int Pop(OrderStack &s);//出栈(删除栈顶元素)
void Traverse(OrderStack &s);//迭代栈
int GetTop(OrderStack s);//获取栈顶元素
int Push(OrderStack &s,ElemType &e);//入栈
//初始化栈(构建一个空栈)
int InitStack(OrderStack &s){
s.base=(ElemType*)malloc(10);
if (!s.base)
exit(0);//存储分配失败
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return 1;
}
//获取栈顶元素
int GetTop(OrderStack s){
ElemType e;
if (s.top==s.base){
return FALSE;
}else{
e=*(s.top-1);
}
return e;
}
//入栈
int Push(OrderStack &s,ElemType &e){
if ((s.top-s.base)>=s.stacksize){
s.base=(ElemType *)realloc(s.base,(s.stacksize+STACK_INCREMENT_SIZE)*sizeof(ElemType));
if (!s.base){
return false;
}
s.top=s.base+s.stacksize;
s.stacksize=s.stacksize+STACK_INCREMENT_SIZE;
printf("%-6顺序栈长度不足!!!开始扩充元素--> %d\n",s.stacksize);
}
*s.top=e;
s.top++;
return 1;
}
//出栈(删除栈顶元素)
int Pop(OrderStack &s){
ElemType e;
if (s.top==s.base){
return 0;
}else{
s.top--;
e=*s.top;
return e;
}
}
//迭代栈
void Traverse(OrderStack &s){
if (s.top==s.base){
} else{
ElemType *traverse=s.top;
while (traverse>s.base){
traverse--;
printf("%d\n",*traverse);
}
}
}
int main(){
OrderStack s;
InitStack(s);
for (int i=1;i<=10;i++){
//*s.top=i;
//++s.top;
Push(s,i);//入栈
printf("获取栈顶元素 %d\n",GetTop(s));
}
printf("---------------入栈---------------\n");
int k=100;
int m=200;
Push(s,k);//入栈
printf("获取栈顶元素 %d\n",GetTop(s));
Push(s,m);//入栈
printf("获取栈顶元素 %d\n",GetTop(s));
printf("---------------出栈---------------\n");
printf("获取出栈元素 %d\n",Pop(s));
printf("获取出栈元素 %d\n",Pop(s));
printf("获取出栈元素 %d\n",Pop(s));
printf("获取出栈元素 %d\n",Pop(s));
printf("---------------迭代---------------\n");
Traverse(s);
system("pause");
return 0;
}