数据结构:栈

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

不含任何元素的栈叫做空栈,栈又称为后进先出(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);
}

猜你喜欢

转载自blog.csdn.net/LSFAN0213/article/details/81265056