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

20 篇文章 0 订阅
15 篇文章 0 订阅
用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、付费专栏及课程。

余额充值