栈的链式存储结构
标签(空格分隔): DS 栈 链式存储
1.链栈的结构代码
//栈节点
typedef struct StackNode
{
int data;
struct StackNode* next;
}StackNode,* LinkStackPtr;
//top节点,相当于头节点
typedef struct LinkStack
{
LinkStackPtr top;//top指针,指向栈顶节点,即第一个节点
int count;//栈长
}* LinkStack;//相当于头指针,指向top节点
2.进栈操作
思路:
1.为要进栈的元素e申请StackNode型新空间,并赋值
2.插入用头插法
3.栈长加一
Status Push(LinkStack s, int e)
{
//新节点
LinkStackPtr p=(LinkStackPtr)malloc(sizeof(StackNode));
p->data=e;
//头插法插入
p->next=s->top;
s->top=p;
s->count++;
3,出栈操作
思路:
1.判断是否空栈,若是空栈则出错
2.声明一个指针p来指向栈顶节点,用指针e返回栈顶节点的值
3.top节点指向栈顶节点下一个节点,释放掉原栈顶节点
4.栈长减一
Status Pop(LinkStack s, int *e)
{
if(s->top==NULL)//或者if(StackEmpty(*s))
return ERROR;
LinkStackPtr p;
p=s->top;
*e=p->data;
s->top=p->next;//或者s->top=s->top->next;
free(p);
s->count--;
return OK;
}