栈的动态顺序存储实现

更新时间:2023-06-30 15:50:48 阅读: 评论:0

/***
*DynaSeqStack.cpp - 动态顺序栈,即栈的动态顺序存储实现
*
*
*题目:实验3-1 栈的动态顺序存储实现
*
*班级:河北师范大学 软件学院
*
一根火柴*姓名:
*
*学号:
*
****/
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <asrt.h>
#include "DynaSeqStack.h"
const int STACK_INIT_SIZE = 100; // 初始分配的长度
const int STACKINCREMENT  = 10;  // 分配内存的增量
/*------------------------------------------------------------
操作目的: 初始化栈
初始条件: 无
操作结果: 构造一个空的栈
函数参数:
SqStack *S 待初始化的栈
返回值:
bool  操作是否成功
------------------------------------------------------------*/
bool InitStack(SqStack *S)
{
asrt(S != NULL);
S->ba = (ElemType*)malloc(sizeof(ElemType) * STACK_INIT_SIZE);
if(S->ba == NULL) return fal;
S->top = S->ba;
S->stacksize = STACK_INIT_SIZE;
return true;
}
/*------------------------------------------------------------
操作目的: 销毁栈
初始条件: 栈S已存在
操作结果: 销毁栈S
函数参数:忧郁的反义词
SqStack *S 待销毁的栈
返回值:
------------------------------------------------------------*/
void DestroyStack(SqStack *S)
{
asrt(S != NULL);外研英语
free(S->ba);
S->top = S->ba = NULL;
}
/*------------------------------------------------------------
操作目的: 判断栈是否为空
初始条件: 栈S已存在
操作结果: 若S为空栈,则返回true,否则返回fal
函数参数:
SqStack S 待判断的栈
返回值:
bool  是否为空
------------------------------------------------------------*/
bool StackEmpty(SqStack S)
{
asrt((S.ba != NULL) && (S.top != NULL));
return(S.ba == S.top);
}
/*------------------------------------------------------------
操作目的: 得到栈的长度
初始条件: 栈S已存在
操作结果: 返回S中数据元素的个数
函数参数:
SqStack S 栈S
返回值:
int  数据元素的个数
------------------------------------------------------------*/
int StackLength(SqStack S)
{
asrt((S.ba != NULL) && (S.top != NULL));
p-S.ba);
}
/*------------------------------------------------------------
操作目的: 得到栈顶元素
初始条件: 栈S已存在
操作结果: 用e返回栈顶元素
函数参数:
SqStack S 栈S
66岁ElemType *e 栈顶元素的值
返回值:
bool  操作是否成功
------------------------------------------------------------*/
bool GetTop(SqStack S, ElemType *e)
{
asrt((S.ba != NULL) && (S.top != NULL));
if(StackEmpty(S)) return fal;
*e = *(S.top-1);
return true;
}
/*------------------------------------------------------------
操作目的: 遍历栈
初始条件: 栈S已
存在
操作结果: 依次对S的每个元素调用函数fp
函数参数:
SqStack S 
栈S
void (*fp)() 访问每个数据元素的函数指针
元旦主题画返回值:
------------------------------------------------------------*/
送远二使安西
void StackTraver(SqStack S, void (*fp)(ElemType))
{
asrt((S.ba != NULL) && (S.top != NULL));
for(; S.ba&p; S.ba++) (*fp)(*S.ba);
}
/*------------------------------------------------------------
操作目的: 压栈——插入元素e为新的栈顶元素
初始条件: 栈S已存在
操作结果: 插入数据元素e作为新的栈顶
函数参数:
SqStack *S 栈S
ElemType e 待插入的数据元素
返回值:
bool  操作是否成功
------------------------------------------------------------*/
bool Push(SqStack *S, ElemType e)
{
if(S == NULL) return fal;
asrt((S->ba != NULL) && (S->top != NULL));
// validate overflow
if(StackLength(*S) == S->stacksize)
{
ElemType *newba;
newba = (ElemType*)malloc(sizeof(ElemType) * (S->stacksize + STACKINCREMENT));
if(newba == NULL)  return fal;
memcpy(newba, S->ba, S->stacksize * sizeof(ElemType));
free(S->ba);
S->ba = newba;
S->top = S->ba + S->stacksize;
S->stacksize += STACKINCREMENT;
}
仿佛的反义词// push
*(S->top++) = e;
农产品营销策略return true;
}
/*------------------------------------------------------------
操作目的: 弹栈——删除栈顶元素
初始条件: 栈S已存在且非空
操作结果: 删除S的栈顶元素,并用e返回其值
函数参数:
SqStack *S 栈S
ElemType *e 被删除的数据元素值
返回值:
bool  操作是否成功
-
-----------------------------------------------------------*/
bool Pop(SqStack *S, ElemType *e)
{
if(S == NULL) return fal;
asrt((S->ba != NULL) && (S->top != NULL));
if(StackEmpty(*S)) return fal;
*e = *(--S->top);
return true;
}

本文发布于:2023-06-30 15:50:48,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1070474.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:操作   元素   数据   目的   栈顶   结果
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图