加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

【数据结构】线性堆栈

发布时间:2020-12-15 06:31:05 所属栏目:安全 来源:网络整理
导读:栈也是一种很重要的数据结构,具备“先进后出”的特点。程序中的函数调用以及递归都涉及栈这一数据结构,熟悉栈有利于我们更好地理解函数的调用过程(主要是形参,局部变量以及函数的返回值)和递归算法的实现过程 1、栈的数据节点 typedef struct _Stack{int

栈也是一种很重要的数据结构,具备“先进后出”的特点。程序中的函数调用以及递归都涉及栈这一数据结构,熟悉栈有利于我们更好地理解函数的调用过程(主要是形参,局部变量以及函数的返回值)和递归算法的实现过程

1、栈的数据节点

typedef struct _Stack
{
	int *pData;   //数据域指针
	int size;     //栈容量
	int top;      //栈顶
}Stack;
2、创建指定容量的栈
Stack* createStack(int MaxElements)
{
	Stack *pStack = NULL;
	if (0 == MaxElements)
		return NULL;

	pStack = (Stack *)malloc(sizeof(Stack));   //开辟栈节点空间
	assert(NULL != pStack);
	memset(pStack,sizeof(Stack));

	pStack->pData = (int *)malloc(sizeof(int)* MaxElements);   //开辟数据空间
	if (NULL == pStack->pData)
	{
		free(pStack);
		pStack = NULL;
	}

	memset(pStack->pData,sizeof(int)* MaxElements);
	pStack->size = MaxElements;
	pStack->top = -1;    //这里按照数组形式,初始值为-1
                             //也设置为栈顶“指针”时刻指向栈顶元素
	return pStack;
}
3、判断栈满,栈空
bool isFull(Stack *pStack)
{
	return (pStack->size == (pStack->top + 1));
}

bool isEmpty(Stack *pStack)
{
	return (-1 == pStack->top);
}
4、压栈操作

异常情况;

1) 栈不存在

2) 栈已满

bool push(Stack *pStack,int value)
{
	if (NULL == pStack)
		return false;

	if (isFull(pStack))
		return false;

	pStack->pData[++pStack->top] = value;
	return true;
}
5、出栈操作

异常情况:

1) 栈不存在

2) 栈为空

bool pop(Stack *pStack,int *value)
{
	if (NULL == pStack)
		return false;

	if (isEmpty(pStack))
		return false;

	*value = pStack->pData[pStack->top--];
	return true;
}
6、释放栈空间

类似于C++中的基类,继承类析构,先释放数据空间,再释放栈节点空间。

这里也可传递一级指针,同样可以释放栈空间内存,但是不能把栈指针设置为NULL,打印数据时也就不能进行判断

bool freeStack(Stack **ppStack)
{
	if (NULL == *ppStack)
		return false;

	if (NULL == (*ppStack)->pData)
	{
		free(*ppStack);
		*ppStack = NULL;
		return true;
	}

	free((*ppStack)->pData);
	free(*ppStack);
	*ppStack = NULL;   //设置,便于后面判断
	                   //所以设置二级指针传递
	return true;
}
7、打印栈数据
void printStack(Stack *pStack)
{
	if (pStack)
	{
		int num = pStack->top;

		while (-1 != num)
			printf("%dn",pStack->pData[num--]);
	}
}

这里创建的栈数据结构实质就是开辟一个指定容量的数组空间,然后设置栈顶位置时刻指向栈顶元素

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读