链式栈
链式栈是一种 数据存储 结构,可以通过 单链表 的方式来实现,使用链式栈的优点在于它能够克服用数组实现的顺序栈空间利用率不高的特点,但是需要为每个栈元素分配额外的指针空间用来存放指针域。
前言
对链式栈进行进栈、出栈和遍历栈的操作
一、链式栈的结构和初始化
typedef struct Node { //Node栈结构
int data; //data数据域
struct Node* next; //next指针域
}Node;
Node* initStack(void) //初始化栈
{
Node* stack = (Node*)malloc(sizeof(Node)); //stack
stack->data = 0; //头部data记录栈的长度
stack->next = NULL; //stack的next指向NULL
return stack;
}
二、对栈的操作
1.判断当前的栈是否为空
代码如下(示例):
vint isEmpty(Node* stack) //判断当前的栈是否为空
{
if (stack->data == 0 || stack->next == NULL)//当栈的长度或者栈的下一个节点为NULL判断
{
return TRUE;
}
else //不为空返回0
{
return FALSE;
}
}
2.进栈
代码如下(示例):
void push(Node* stack, int data) //进栈
{
Node* node = (Node*)malloc(sizeof(Node)); //node
node->data = data; //node的data
node->next = stack->next; //node的下一个指针指向stack的下一个指针
stack->next = node; //stack的下一个指针指向node
stack->data++; //头部的data长度++
}
3.出栈
代码如下(示例):
int pop(Node* stack) //出栈
{
if (isEmpty(stack)) //判断是否为空
{
return -2;
}
else
{
Node* node = stack->next; //node指向栈的第一个节点
int data = node->data; //data等于第一个节点的数据域
stack->next = node->next; /*stack的下一个指针指向node的下一个指针*/
free(node); //释放node
return data;
}
}
4.得到栈顶
代码如下(示例):
int getTop(Node* stack) //得到当前的栈顶
{
if (isEmpty(stack)) //先判断当前的栈是否为空
{
return -1;
}
else
{
return stack->next->data; //返回栈顶的数据域data
}
}
总结
上述若有错误麻烦请指出,谢谢。