⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sqstack.cpp

📁 数据结构C语言中的顺序栈的实现
💻 CPP
字号:
#include <stdlib.h>
#include <stdio.h>

#include "../header/SqStack.h"

Status InitStack(SqStack &S)
{
	S.base = (SElemType*)malloc(sizeof(SElemType) * STACK_INIT_SIZE);
	if(!S.base) exit(OVERFLOW);

	S.top = S.base;
	S.stacksize = STACK_INIT_SIZE;
	return OK;
} //InitStack

Status DestroyStack(SqStack &S)
{
	if(!S.base) return ERROR;

	free(S.base);
	S.base = NULL;

	free(S.top);            //?????
	S.top = NULL;

	S.stacksize = 0;
}

Status ClearStack(SqStack &S)
{
	if(!S.base) return ERROR;           //栈不存在,返回

	if(S.top == S.base) return ERROR;   //栈为空,返回

	S.top = S.base;
}

Status IsStackEmpty(SqStack S)
{
	if(!S.base) return ERROR;           //栈不存在,返回

	if(S.top == S.base)
	    return true;
	else
	    return false;
}//IsStackEmpty

int StackLength(SqStack S)
{
	if(!S.base) return ERROR;           //栈不存在,返回

	return S.top - S.base;
}//StackLength

Status GetTop(SqStack S, SElemType &e)
{
	if(!S.base) return ERROR;           //栈不存在,返回

	if(S.base == S.top)
	{
		return ERROR;
	}

	e = *(S.top - 1);
	return OK;
} //GetTOp

Status Push(SqStack &S,SElemType e)
{
	if(S.top - S.base >= S.stacksize)       //栈满,追加存储空间
	{
		S.base = (SElemType*)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof \
				(SElemType));

		if(!S.base) exit(OVERFLOW);

		S.top = S.base + S.stacksize;
		S.stacksize += STACKINCREMENT;
	}

	*S.top++ = e;
	return OK;
} //Push

Status Pop(SqStack &S, SElemType &e)
{
	if(S.base == S.top)
	{
		return ERROR;
	}

	e = *(--S.top);
	return OK;
}

Status StackTraverse(SqStack &s, Status(*visit)())
{
	//To be
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -