C++数据结构-堆栈实现

来源于   [维基百科,自由的百科全书]

堆栈

 
(重定向自 堆疊

堆栈(英文:stack),在计算机科学中,是一种特殊的串行形式的数据结构,它的特殊之处在于只能允许在链结串行或阵列的一端(称为堆栈顶端指标,英文为top)进行加入资料(push)和输出资料(pop)的运算。另外堆栈也可以用一维数组或链表的形式来完成。

由于堆栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。

堆栈数据结构使用两种基本操作:推入(push)和弹出(pop):

  • 推入(push)
:将数据放入堆栈的顶端(阵列形式或串行形式),堆栈顶端top指标加一。
  • 弹出(pop)
:将顶端数据资料输出(回传),堆栈顶端资料减一。
 
 
#pragma once
typedef char DataType;
const int MaxStatckSize = 50; //栈大小 
class StackDemo
{
private:
	 DataType stacklist[MaxStatckSize];
	 int top;//栈顶
public:
	//构造函数
	StackDemo(void);
	~StackDemo(void);
public:
	//压栈出栈操作
	 void Push(const DataType &item);
	 DataType Pop(void);
	 void ClearStack(void);

	 //访问栈顶
	 DataType Peek(void)const;

	 //检测椎栈
	 bool isEmpty(void)const;
	 bool isFull(void)const;
};
头文件stackDemo.h

  

#include "StackDemo.h"
#include <iostream>

StackDemo::StackDemo(void)
{
	this->top = -1;
}


StackDemo::~StackDemo(void)
{
	this->top = -1;
}

void StackDemo::Push(const DataType &item)
{
	//栈是否已满
	if(!isFull())
	{   top += 1;
		this->stacklist[top] = item;
	   
	}
	else 
		std::cout << "Out of the Stack!" << std::endl;
}

DataType StackDemo::Pop(void)
{
	if(!isEmpty())
	{     
	  int ebp = top;
	  top -= 1;
	  return stacklist[ebp];
	}
	else 
		return -1;
}

DataType StackDemo::Peek(void)const
{
	return top;
}

void StackDemo::ClearStack()
{
	for(int i = top;i >=0 ;i--)
		stacklist[i] = 0;
	top = -1;
	std::cout << "Clear stack done!" << std::endl;
}

bool StackDemo::isFull(void)const
{
	return top > MaxStatckSize?true:false;
}

bool StackDemo::isEmpty(void)const
{
	return top < 0 ?true:false;
}
实现 stackDemo.cpp

  

#include <iostream>
#include "StackDemo.h"
using namespace std;

int main()
{
	StackDemo *sd = new StackDemo();

	sd->Push(10);//压栈
	sd->Push(20);//压栈
	sd->Push(30);//压栈

	cout << "Stack TOP:" << sd->Peek() << endl;
	cout << "POP:" << sd->Pop() << endl;

	system("pause");//暂停
	
	return 0;

}
main.cpp

  

维基百科,自由的百科全书
 

回文,亦称回环,是正读反读都能读通的句子,亦有将文字排列成圆圈者,是一种修辞方式文字游戏。回环运用得当,可以表现两种事物或现象相互依靠或排斥的关系。

 

//把StackDemo typedef int DataType 改为 typedef char DataType

  

#include <iostream>
#include "StackDemo.h"
using namespace std;

void Deblank(char *s,char *t)
{
	while(*s  != NULL)
	{ 
		//扫描整个串

		if(*s != ' ') //不是空格
         *t = *s;
	*s ++;
	*t ++;
	}

	*t = NULL;
}
int main()
{
	
	StackDemo *S = new StackDemo();//回文栈
	
	char palstring[80],deblankstring[80],c;
	
	cout << "Enter  some chars with a  'n' to stop" << endl;

	cin.getline(palstring,80,'n');//以n结束

	bool isPalindrome = true; //假定是回文
    
	//去除空格
	Deblank(palstring,deblankstring);

   //将字符串压栈

	int i = 0;

	while(deblankstring[i] !='\0')
	{
		S->Push(deblankstring[i]);
		i++;

	}

	i = 0;
	//出栈并比较
	while((c = S->Pop()) != -1)
	{
		if(c != deblankstring[i])
		{
			isPalindrome = false;
			break;
		}
		i++;
	}

	if(isPalindrome)
		cout << palstring << " is a palindromic string" << endl;
	else 
		cout << palstring << " is not  a palindromic string" << endl; 
	system("pause");//暂停
	
	return 0;

}

  

转载于:https://www.cnblogs.com/pengshao/archive/2011/12/26/2301461.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值