c++实现数组栈和链式栈

用c++实现了数组栈和链式栈,栈是一种特殊的线性表,只能一头进出,在函数递归时应用挺大的。
</pre><pre name="code" class="cpp">

//这是数组栈

#include
#include
using namespace std;
#define size 20
class stack
{
public:
	stack()
	{
		number = 0;
	}
	void push(int c)
	{
		if (number == size)
		{
			cout << "栈已经满了,无法在插入了" << endl;
			return;
		}
		else
		{
			number++;
			a[number] = c;
		}
	}
	void pop()
	{
		if (number == 0)
		{
			cout << "栈已经空" << endl;
			return;
		}
		else
		{
			cout << "出栈元素是" << a[number] << endl;
			number--;
		}
	}
	void show()
	{
		cout << "栈里现在有元素的个数是" << number << endl;
	}
private:
	int a[size];
	int number;
};
int main()
{
	class stack stack1;
	int c;
	string str1;
	cout << "输入y进行入栈 输入n进行出栈, 输入k显示当前栈中元素的个数, 输入x退出" << endl;
	cin >> str1;
	while (str1[0] != 'x')
	{
		if (str1[0] == 'y')
		{
			cout << "输入你要入栈的元素" << endl;
			cin >> c;
			stack1.push(c);
		}
		else if (str1[0] == 'n')
		{
			stack1.pop();
		}
		else if (str1[0] == 'k')
			stack1.show();
		cout << "输入y进行入栈输入n进行出栈,输入k显示当前栈中元素的个数,输入x退出" << endl;
		cin >> str1;
	}
	return 0;
}


//这是链式栈
//链表实现栈,栈就是线性表的特例,所以链式栈就是和链表一样的定义,实现上稍微不同。
#include
#include
#include 
using namespace std;
typedef int elem;

class stacknode  //栈节点类,
{
public:
	stacknode *next;//需要被其他类的函数访问和使用,
	elem ele;
	stacknode( elem v, stacknode *nextp = NULL)//构造函数,只是构造数值
	{
		ele = v;
		next = nextp;
	}
	stacknode(stacknode *nextp = NULL)//构造指针
	{
	  next = nextp;//第一个插入的元素的指针域就是NULL.
	}
	~stacknode(){}
};

class Linkstack
{
private:
   stacknode *top;//栈顶指针,只是被本类的函数访问
public:
	int number=0;
	Linkstack( int count = 20)//链栈初始化,构造函数
	{
		top = NULL;//数组栈中top赋数值,链式栈应该是null。
	}
	void clear();
	~Linkstack(){ clear();}//析构函数
	void show()
	{
		cout << "栈里现在有元素的个数是" << number << endl;
	}
	void push( elem v)
	{
		top = new stacknode(v, top);//初始化。top指向新节点,v作为第一个节点的数值,null作为指针域。
		number++;
	}
	elem pop();
	elem topValue()
	{
		assert(!isEmpty()); return top->ele;
	}
	bool isEmpty()
	{
		return top = NULL;
	}
};

void Linkstack::clear()
{
	while (top != NULL)
	{
		stacknode *p = top;
		top = top->next;
		delete p;
	}
}

elem Linkstack::pop()
{
	elem temp;
	assert(!isEmpty());
	stacknode *p = top;
	temp = top->ele;
	top = top->next;
	delete p;
	number--;
	return temp;

}

int main()
{
	Linkstack stack1;
	elem  c=0;
	char str1;
	cout << "输入a进行入栈 输入b进行出栈, 输入c显示当前栈中元素的个数, 输入d退出" << endl;
	cin >>str1;
	while (str1!= 'd')
	{
		if (str1 == 'a')
		{
			cout << "输入你要入栈的元素" << endl;
			cin >> c;
			stack1.push(c);
		}
		else if (str1 == 'b')
		{
			stack1.pop();
		}
		else if (str1 == 'c')
			stack1.show();
		cout << "输入a进行入栈 输入b进行出栈,输入c显示当前栈中元素的个数,输入d退出" << endl;
		cin >> str1;
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值