数据结构:栈
程序员文章站
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);
}