内容发布更新时间 : 2024/12/23 10:41:34星期一 下面是文章的全部内容请认真阅读。
华南农业大学数据结构上机答案实验
8583 顺序栈的基本操作 时间限制:1000MS 内存限制:1000K 提交次数:530 通过次数:212
题型: 编程题 语言: 无限制
Description
创建一个空的顺序栈,并实现栈的入栈、出栈、返回栈的长度、返回栈顶元素、栈的遍历等基本算法。请将下
#include<malloc.h> #include<stdio.h> #define OK 1 #define ERROR 0
#define STACK_INIT_SIZE 100 // 存储空间初始分配量 #define STACKINCREMENT 10 // 存储空间分配增量
typedef int SElemType; // 定义栈元素类型
typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
struct SqStack {
SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL SElemType *top; // 栈顶指针
int stacksize; // 当前已分配的存储空间,以元素为单位 }; // 顺序栈
Status InitStack(SqStack &S) {
// 构造一个空栈S,该栈预定义大小为STACK_INIT_SIZE // 请补全代码
S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S.base) return ERROR; S.top=S.base;
S.stacksize=STACK_INIT_SIZE; return OK; }
Status Push(SqStack &S,SElemType e) {
// 在栈S中插入元素e为新的栈顶元素 // 请补全代码
if(S.top-S.base>=S.stacksize)
{S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base) return ERROR; S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; }
*S.top++=e; return OK; }
Status Pop(SqStack &S,SElemType &e) {
// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR // 请补全代码
if(S.top==S.base) return ERROR;
e=*--S.top; return OK; }
Status GetTop(SqStack S,SElemType &e) {
// 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回// 请补全代码
if(S.top==S.base) return ERROR; e=*(S.top-1); return OK; }
int StackLength(SqStack S) {
// 返回栈S的元素个数 // 请补全代码 return S.top-S.base; }
Status StackTraverse(SqStack S) {
ERROR