栈的特点:栈是一种仅在表尾进行操作的线性表
栈的用处:栈可以做如数制转换,括号匹配,行编辑程序以及进行迷宫求解等的问题。
谢谢大家的支持,也希望大家指出其中的不足
#include<iostream>
#include<cstdio>
#define stack_init_size 100
#define stackincrement 10
#define false 0
#define ok 1
using namespace std;
typedef struct{
int *base;
int *top;
int stacksize;
}sqstack;
int initstack(sqstack &s){
s.base=(int *)malloc(stack_init_size*sizeof(sqstack));//c语言申请动态内存空间
if(!s.base){
return false;
}
s.top=s.base;//空栈的条件
s.stacksize=stack_init_size;//更新栈的容量
return ok;
}//构造一个空栈。
void scanf_stack(sqstack &s,int n){
for(int i=1;i<=n;i++){
cin>>*(s.top);
s.top++;
}
}//往栈中填充数据
int gettop(sqstack &s,int &e){
if(s.top==s.base){
return false;
}
e=*(s.top-1);//s.top指向的是空白区域
return ok;
}//获得栈顶元素,并用e返回
int push(sqstack &s,int e){
if(s.top-s.base>=s.stacksize){
s.base=new int (stackincrement+stack_init_size);//C++申请内存空间
if(!s.base)
return false;
s.top=s.base;//更新栈顶的指针的值
s.stacksize+=stackincrement;//更新栈的容量
}
*s.top++=e;//将e插入到栈顶
return ok;
}//向栈顶增加元素
int pop(sqstack &s,int &e){
if(s.top==s.base){
return false;
}
e=*(--s.top);
return ok;
}//删除栈顶元素,并且用e返回
int printf_stack(sqstack &s){
while(s.top!=s.base){
cout<<*(--s.top)<<" ";
}
cout<<endl;
return ok;
}
int main(int argc, char const *argv[]) {
sqstack s;
int e=0,a=0;
initstack(s);
scanf_stack(s,10);
//printf_stack(s);//可以在这里调试,看输出是否正确
gettop(s,e);
cout<<e<<endl;
push(s,11);
//printf_stack(s);//同样是第二个调试的地点
pop(s,a);
cout<<a<<endl;
printf_stack(s);
return 0;
}