欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构:栈

程序员文章站 2024-01-19 17:16:34
...

栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作,进行插入和删除元素的一端叫做栈顶,另一端称为栈底

不含任何元素的栈叫做空栈,栈又称为后进先出(LIFO)线性表

用一张图来表示这种数据结构:

数据结构:栈

栈的特性:后进先出(LIFO)特殊线性表

栈功能:将数据从一种序列改变到另一种序列

下面用代码来详细了解栈(代码不长,我就不分开来展示了)

typedef struct Stack{
	SDataType array[MAX_SIZE];                
	int top;		                                     //含义和顺序表是一样的
}	Stack;	                                         //1.表示有效数据的个数    2.top下标表示当前可用位置

void StackInit(Stack *pS)
{
	assert(pS != NULL);

	pS->top = 0;                        //将有效数据个数清0就完成了对栈的初始化
}

void StackPush(Stack *pS, SDataType data)
{
	assert(pS != NULL);
	assert(pS->top < MAX_SIZE);       //保证有效数据个数不超过栈的大小

	pS->array[pS->top++] = data;
}

void StackPop(Stack *pS)
{
	assert(pS != NULL);
	assert(pS->top >0);              //保证栈中有效元素的个数不为0

	pS->top--;
}
//查看栈顶元素
SDataType StackTop(Stack *pS)
{
	assert(pS != NULL);
	assert(pS->top > 0);

	return pS->array[pS->top - 1];
}
//判空 1 表示空  0  表示非空
int StackIsEmpty(Stack *pS)
{
	return pS->top == 0 ? 1 : 0;
}
//查看栈的大小
int StackSize(Stack *pS)
{
	return pS->top;
}
//栈复制
void StackCopy(Stack *pDest, Stack *pSrc)
{
	pDest->top = pSrc->top;
	memcpy(pDest->array, pSrc->array, sizeof(SDataType)*pSrc->top);

}

void TestStack()
{
	Stack stack;
	StackInit(&stack);
}