#include <iostream>
#include <string>
using namespace std;
//---------------抽象数据类型顺序栈的定义------------------//
#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 10
typedef char SElemType,QElemType;
typedef struct {
SElemType *base;
SElemType *top;
int StackSize;
}SqStack;
//---------------------顺序栈的接口函数声明-----------------------//
//构造一个空栈
bool InitStack(SqStack &S);
//销毁栈,释放栈所占内存空间
void DestroyStack(SqStack &S);
//把S置为空栈
bool ClearStack(SqStack &S);
//若栈S为空栈,返回true,否则返回false
bool StackEmpty(SqStack &S);
//返回栈S的元素个数
int StackLength(SqStack &S);
//若栈不空,则用e返回S的栈顶元素,并返回ok;否则返回error
bool GetTop(SqStack &S,SElemType &e);
//插入新元素e为新的栈顶元素
bool Push(SqStack &S,SElemType e);
//若栈不空,删除S的栈顶元素,并用e返回其值,并返回true,否则返回false
bool Pop(SqStack &S,SElemType& e);
//-----------接口函数的实现部分-------------------//
bool InitStack(SqStack &S)
{//构造一个空栈
S.base = new SElemType[STACK_INIT_SIZE];
if(!S.base) return false;
S.top = S.base;
S.StackSize = STACK_INIT_SIZE;
return true;
}//InitStack
void DestroyStack(SqStack &S)
{//销毁栈,释放栈所占内存空间
if( S.base ) delete []S.base;
}//DestroyStack
bool ClearStack(SqStack &S)
{//把S置为空栈
if(!S.base) return false;
S.top = S.base;
return true;
}//ClearStack
bool StackEmpty(SqStack &S)
{//若栈S为空栈,返回true,否则返回false
if( S.base == S.top ) return true;
else return false;
}//StackEmpty
int StackLength(SqStack &S)
{//返回栈S的元素个数,即栈的长度
return S.top - S.base;
}//StackLength
bool GetTop(SqStack &S, SElemType &e)
{//若栈不空,则用e返回S的栈顶元素,并返回ok;否则返回error
if ( S.top == S.base ) return false;
e = *(S.top - 1);//栈顶指针总是指向栈顶元素的下一个存储单元的
return true;
}//GetTop
bool Push(SqStack &S, SElemType e)
{//插入新元素e为新的栈顶元素
if((S.top - S.base)== S.StackSize){//栈满,追加存储空间
S.base = new(S.top) SElemType[STACK_INCREMENT];
if (S.base) return false;
S.top = S.base + S.StackSize;
S.StackSize += STACK_INCREMENT;
}
*S.top++ = e;
return true;
}//Push
bool Pop(SqStack &S,SElemType& e)
{//若栈不空,删除S的栈顶元素,并用e返回其值,并返回true,否则返回false
if( S.top == S.base ) return false;
e = *--S.top;
return true;
}//Pop
// SqStack.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "SqStack.h"
int _tmain(int argc, _TCHAR* argv[])
{
SqStack s; //发生了什么?
InitStack(s); //又发生了什么?
char str[40] = {"My name is Betty Dolsberry!"};
cout << str << endl; //print the string
int i = 0;
while (str[i])
//无需对栈满进行判断,SqStack在栈满时
//会自动增加栈空间
Push(s, str[i++]);
char c;
while (!StackEmpty(s)){ //print the reverse
Pop(s, c);
cout << c;
}
return 0;
}
分享到:
相关推荐
《C++数据结构——栈》 栈是一种在计算机科学中广泛应用的数据结构,它遵循“先进后出”(First In Last Out, FILO)的原则。在栈中,元素的插入(压栈)和删除(弹栈)操作只允许在栈顶进行。栈的主要特点在于其...
《C++语言描述——数据结构算法与应用》是一本针对C++编程者深入理解数据结构和算法的重要参考资料。这本书以C++为工具,系统地阐述了数据结构的基本概念、常用算法及其在实际问题中的应用。对于初学者而言,它不仅...
在"数据结构C++语言描述——应用标准模板库(STL)源代码"这本书中,作者可能详细解释了如何使用C++的STL来实现常见的数据结构,以及如何利用STL提供的工具优化代码性能。通过分析书中的源代码ftsoftds_VC++6,我们...
栈是一种特殊的线性数据结构,遵循“后进先出”(LIFO)的原则。在计算机科学中,栈常被用于解决各种问题,如...无论是静态栈还是链表栈,它们都提供了灵活的方式来管理和处理数据,使得算法的设计和实现更为便捷。
在"数据结构与程序设计——C++语言描述"中,我们将会深入学习如何使用C++来实现各种经典的数据结构。 首先,数据结构是计算机存储、组织数据的方式,常见的数据结构包括数组、链表、栈、队列、树和图等。数组是最...
在C#编程中,利用栈数据结构来解决四则运算,特别是处理包含多重括号和多位数的运算问题,是一种常见的方法。栈是一种后进先出(LIFO,Last In First Out)的数据结构,非常适合处理这类计算问题。下面将详细阐述...
在C++编程中,栈是一种常见的数据结构,它遵循“后进先出”(LIFO,Last In First Out)的原则。在这个例子中,我们将创建一个简单的字符栈类`Stack`,用于存储和操作字符。这个类包含两个主要的数据成员:一个字符...
在C++编程中,链表和栈是两种非常基础且重要的数据结构,它们在很多算法和程序设计中都有着广泛的应用。下面将详细讲解如何使用C++类来实现这两种数据结构。 首先,我们从链表开始。链表是一种线性数据结构,其中的...
本示例中,我们将探讨如何使用C++标准库中的`stack`容器来实现一个简单的运算表达式解析器,处理如"3+(3*5)"这样的字符串。这种解析方法通常称为后缀表达式(Reverse Polish Notation, RPN)或逆波兰表示法。 首先...
《C++程序设计实验指导与实训》是一本旨在帮助初学者深入理解并实践C++编程的书籍。源代码是学习编程的重要组成部分,因为它们提供了实际的示例和练习,使学习者能够动手操作,理解程序的运行机制。下面将详细讨论...
C++ STL(Standard Template Library,标准模板库)中的Stack是一种基于容器适配器的数据结构,它模拟了数学上的后进先出(LIFO,Last In First Out)的栈操作。栈是一种线性数据结构,其操作集中在一端,称为栈顶。...
C++栈类模板 template class Stack { public: Stack(void); void Push(const T &item;); //将元素item压入栈 T Pop(void); //将栈顶元素弹出栈 void ClearStack(void); T Peek(void)const; //访问栈顶元素 ...
Stack* stack = (Stack*)malloc(sizeof(Stack)); if (stack == NULL) { return NULL; } stack->data = (int*)malloc(capacity * sizeof(int)); if (stack->data == NULL) { free(stack); return NULL; } ...
void delete_all(Stack<T> &s, const T &x)——删除栈s中所有等于x的数据项,保持其他数据项顺序不变。 输入:input.txt,其第一个字符为x,其后按栈底到栈顶的顺序依次给出栈中字符,字符间用空格、回车或制表符...
使用C++自制栈,根据大小改变类,方法简单。这是简易版,会发完成版的。打开.txt文件,修改typedef (类型) type,修改const int big = ...。把修改后的源码打在编译器里,保存Stack.h,#include <文件夹路径\Stack.h...
本文将深入探讨如何使用C++语言实现任意进制转换,特别是涉及到小数部分的处理,并结合数据结构中的栈和队列进行阐述。C++作为一门强大的静态类型语言,其丰富的库支持和高效性能使得它成为实现这种算法的理想选择。...
STL 之栈(csdn)————程序 STL(Standard Template Library)中的栈(Stack)是一种容器适配器,提供了FILO(先进后出)数据结构的实现。栈是一种 Last-In-First-Out(LIFO)的数据结构,即最后入栈的元素最先...