【数据结构】顺序栈的C语言实现(通过顺序表实现栈的顺序存储)
顺序表实现顺序栈的原理
栈是一种特殊的线性表,它只能在线性表的一端进行插入删除操作,允许插入删除的一端称为栈顶,另一端称为栈底。栈的顺序存储即顺序栈是指,用一块连续的内存来存放一个栈,类似于数组,各元素在内存中是一个挨一个的。既然栈也是线性表,那么栈就可以通过线性表来实现,实现顺序栈只需在顺序表的插入删除操作时,只限定在一端操作即可。线性表的顺序存储文章链接如下
【数据结构】线性表的顺序存储API及实现https://blog.csdn.net/qq_43471489/article/details/123762070?spm=1001.2014.3001.5501线性表可以在头部和尾部进行插入删除,而栈只能在栈顶进行插入删除,那么应该选择顺序表的哪一端作为栈顶呢?
假如线性表头部作为栈顶,如上图所示,也就是说线性表的0号位置处作为栈顶,那么每次插入删除,都需要后面的元素都后移或前移(在0号位置插入时,需要原来的0号变为1号,原来的1号变为2号,以此类推,每个元素都要往后移动一位;删除0号元素时,0号位置空出,应把1号前移变为0号,2号前移变为1号,每个元素都要前移一位),会造成大量的数据移动。所以,应选择线性表的尾部作为栈顶,这样插入删除都不要其他元素移动。
顺序栈的API
typedef void SequenceStack;
typedef void SequenceStackNode;
SequenceStack* SequenceStack_Create(int capacity);
void SequenceStack_Destroy(SequenceStack* stack);
void SequenceStack_Clear(SequenceStack* stack);
int SequenceStack_Push(SequenceStack* stack, SequenceStackNode* node);
SequenceStackNode* SequenceStack_Top(SequenceStack* stack);
SequenceStackNode* SequenceStack_Pop(SequenceStack* stack);
int SequenceStack_Size(SequenceStack* stack);
顺序栈的API实现
SequenceStack* SequenceStack_Create(int capacity)
{
SequenceStack* pTemp = NULL;
pTemp = (SequenceStack*)LinearList_Create(capacity);
if (pTemp == NULL)
{
printf("LinearList_Create() err\n");
return NULL;
}
return pTemp;
}
void SequenceStack_Destroy(SequenceStack* stack)
{
LinearList_Destroy((LinearList*)stack);
}
void SequenceStack_Clear(SequenceStack* stack)
{
LinearList_Clear((LinearList*)stack);
}
int SequenceStack_Push(SequenceStack* stack, SequenceStackNode* node)
{
return LinearList_Insert((LinearList*)stack, node, LinearList_Length((LinearList*)stack));
}
SequenceStackNode* SequenceStack_Top(SequenceStack* stack)
{
return (SequenceStackNode*)LinearList_Get((LinearList*)stack, LinearList_Length((LinearList*)stack) - 1);
}
SequenceStackNode* SequenceStack_Pop(SequenceStack* stack)
{
return (SequenceStackNode*)LinearList_Delete((LinearList*)stack, LinearList_Length((LinearList*)stack) - 1);
}
int SequenceStack_Size(SequenceStack* stack)
{
return LinearList_Length((LinearList*)stack);
}
代码资源已经上传
顺序栈的C语言实现(栈的顺序存储)https://download.csdn.net/download/qq_43471489/85066042