以下代码没有使用模板类(只以int为例)
且没有使用c++的类的思想,仅以结构体
1.顺序栈
#include<iostream>
#define Maximun 1000 //预设栈的大小
using namespace std;
struct my_stack
{
int *top;
int *base;
};
bool creat_stack(my_stack & sta)
{
sta.base=new int[Maximun];
if(sta.base == NULL)return false;
sta.top=sta.base; //初始化栈为空
return true;
}
void init_stack(my_stack & sta)
{
int n;
cout<<"请输入要入栈的数据个数:"<<endl;
cin>>n;
cout<<"请输依次输入"<<n<<"个的值:"<<endl;
while(n--)
{
int m;
cin>>m;
*sta.top=m;
sta.top++;
}
}
bool stack_push(my_stack & sta)
{
if(sta.top-sta.base >=Maximun)return false;
cout<<"请输入要入栈的数:"<<endl;
int m;
cin>>m;
*sta.top=m;
sta.top++;
return true;
}
bool stack_pop(my_stack & sta)
{
if(sta.top==sta.base)return false;
sta.top--;
return true;
}
int stack_top(my_stack & sta)
{
if(sta.top==sta.base)
{
cout<<"已经到栈底,出栈错误"<<endl;
exit(0);
}
return *(sta.top-1);
}
int main()
{
my_stack sta;
if(!creat_stack(sta))
{
cout<<"error"<<endl;
exit(0);
}
init_stack(sta);
cout<<stack_top(sta)<<endl;
if(!stack_pop(sta))
{
cout<<"已经到栈底"<<endl;
}
if(!stack_push(sta))
{
cout<<"入栈失败"<<endl;
}
cout<<stack_top(sta)<<endl;
//依次清空栈内数值
while(sta.top!=sta.base)
{
stack_pop(sta);
sta.top--;
}
return 0;
}
2.链栈
#include<iostream>
using namespace std;
struct stack_point //链栈的节点
{
int data;
stack_point* next;
};
//链栈,top始终指向栈顶,并且栈底存在元素
//而base始终指向栈底,并且栈底为空
//当base与top相等时表示栈空
//这与顺序栈相反
struct mystack
{
stack_point* base;
stack_point* top;
};
void init_mystack(struct mystack& s)
{
s.base=NULL;
s.top=NULL;
}
void creat_mystack(struct mystack& s)
{
int n;
cout<<"请输入要创建栈的元素个数"<<endl;
cin>>n;
cout<<"请输入元素的值"<<endl;
for(int i=1;i<=n;i++)
{
stack_point* p=new stack_point;
cin>>p->data;
if(i==1)p->next=s.base,s.top=p; //top始终指向栈顶,并且栈底存在元素
else p->next=s.top,s.top=p; //base始终指向栈底,并且栈底为空
}
}
void mystack_push(struct mystack& s,int value)
{
stack_point* p=new stack_point;
p->data=value;
p->next=s.top;
s.top=p;
}
bool mystack_pop(struct mystack& s)
{
if(s.top==s.base)
{
cout<<"已经到栈底,无法元素可删除"<<endl;
return false;
}
stack_point* p=s.top;
s.top=p->next;
delete p;
return true;
}
int mystack_top(struct mystack& s)
{
if(s.top==s.base)cout<<"已经到栈底,无元素可取"<<endl,exit(0);
return s.top->data;
}
int main()
{
mystack s;
init_mystack(s);
creat_mystack(s);
cout<<"将100入栈并输出再出栈"<<endl;
mystack_push(s,100);
cout<<mystack_top(s)<<endl;
if(mystack_pop(s))
{
cout<<"出栈成功"<<endl;
}
cout<<"---------------------"<<endl;
cout<<"依次出栈并输出"<<endl;
while(s.base!=s.top)
{
cout<<mystack_top(s)<<endl;
mystack_pop(s);
}
return 0;
}