堆栈(数据结构)

自己尝试写了个堆栈。

#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;
}

猜你喜欢

转载自blog.csdn.net/shamansi99/article/details/89421228