Bootstrap

数据结构初阶学习——抽象数据类型栈

在计算机科学中,栈这种抽象数据类型是十分重要的,其基本运作原理可简化为四个字“后进先出”。如下图

而栈在描述函数调用的时候是非常好用的,当前环境一般由栈顶函数进行描述,当函数返回后,执行出栈操作,回到前一级调用该函数的函数,这样逐步递归到主函数。

 栈的链表实现通常为尾删尾增的形式。但栈的数组实现更为简单,且更为常用,接下来就来进行栈的数组实现。

首先构思,为了实现栈我们首先需要能够存储数据的内存来当作栈,这件事情就可以交给数组来搞定,数组交给指针来维护,同时还得有一个记录栈的最大空间的capacity。最后,我们需要有一个数据来记录栈内元素的个数。这样一来,栈顶就可以通过这个记录元素个数的数据来访问了。栈就需要一个结构体来实现了。

栈的结构体声明:

struct Stack;
typedef struct Stack* PtrStack;
struct Stack
{
	int* arr;
	int size;
	int capacity;
};

创建一个栈:
通过主调函数给的值来创建相应大小的栈 

PtrStack CreatingStack(int maxnum)
{
	PtrStack S = (PtrStack)malloc(sizeof(Stack));
	assert(S);
	S->arr = (int*)malloc(sizeof(int) * maxnum);
	assert(S->arr);
	S->capacity = maxnum;
	S->size = 0;
	return S;
}

进栈操作:

void PushStack(PtrStack S, int value)
{
	assert(!(S->size >= S->capacity));
	S->arr[S->size] = value;
	S->size++;
}

出栈操作:

void PushStack(PtrStack S, int value)
{
	assert(!(S->size >= S->capacity));
	S->arr[S->size] = value;
	S->size++;
}

;