实训C++语言设计——Stack 栈运算

本文介绍了一种基于C++的顺序栈数据结构实现方法,包括初始化、销毁、清空、判断是否为空、获取栈顶元素等核心操作,并通过一个字符串逆序输出的例子展示了其使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值