C++数据结构-堆栈实现
来源于 [维基百科,自由的百科全书]
堆栈
(重定向自堆疊)
堆栈(英文:stack),在计算机科学中,是一种特殊的串行形式的数据结构,它的特殊之处在于只能允许在链结串行或阵列的一端(称为堆栈顶端指标,英文为top)进行加入资料(push)和输出资料(pop)的运算。另外堆栈也可以用一维数组或链表的形式来完成。
由于堆栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。
堆栈数据结构使用两种基本操作:推入(push)和弹出(pop):
|
:将数据放入堆栈的顶端(阵列形式或串行形式),堆栈顶端top指标加一。 |
|
:将顶端数据资料输出(回传),堆栈顶端资料减一。 |
#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; }
posted on 2011-12-26 00:42 ManLoveGirls 阅读(7752) 评论(0) 编辑 收藏 举报