自己尝试写了个堆栈。
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<iostream>
using namespace std;
struct stack
{
int v; //栈存储的值
stack *front; //指向前一个栈中的元素
}*top=NULL; //top指针指向栈顶
void push(int v) //入栈
{
if(top==NULL)
{
top=(stack *)malloc(20);
top->v=v;
top->front=NULL; //栈最底部的front指针为空,这是区分是否到达栈底的标志
}
else
{
stack *temp=(stack *)malloc(20);
temp->v=v; temp->front=top;
top=temp;
}
}
void pop() //出栈
{
if(top==NULL)
return;
else
{
stack *temp=top->front;
free(top);
top=temp;
}
}
int size() //测量栈的大小
{
int num=0;
stack *p,*temp;
p=top;
while(p!=NULL)
{
num++;
temp=p->front;
p=temp;
}
return num;
}
bool empty() //测试栈是否为空
{
return top==NULL;
}
void clear() //清空栈
{
while(top!=NULL)
{
stack *temp;
temp=top->front;
free(top);
top=temp;
}
}
int main()
{
int n,i,m;
while((cin>>n)&&n)
{
for(i=1;i<=n;i++)
{
cin>>m;
push(m); //测试push()函数
}
cout<<size()<<endl; //测试size()函数
for(i=1;i<=n;i++)
{
cout<<top->v<<' ';
pop(); //测试pop()函数
}cout<<endl;
}
for(i=1;i<=3;i++)
{
cin>>m;
push(m);
}clear(); //测试clear()函数
if(empty()) //测试empty()函数
cout<<"YES"<<endl;
else cout<<"NO"<<endl;
return 0;
}