C语言之数据结构(链栈)
一、栈的链式存储结构
栈的链式存储结构,简称为链栈。
二、链栈的简单说明
栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?
由于单链表有头指针,而栈顶指针也是必须的,那么为啥不让它俩合二为一呢,所以比较好的办法就是把栈顶放在单链表的头部。另外,都有栈顶在头部了,单链表中比较常用的头结点就失去了意义,通常对于链栈来说,是不需要都结点的。
特点:对于链表来说,基本不存在栈满的情况,除非内存已经没有可以使用的空间了。
三、链栈的代码
1.链栈的结构体代码如下:
代码如下(示例):
typedef struct StackNode
{
SElemType data;结点数据域
struct StackNode *next;结点指针域
}StackNode,*LinkStackPtr;
typedef struct LinkStack
{
LinkStackPtr top;栈顶指针
int count;链表长度
}LinkStack;
2.进栈操作
对于链栈的进栈操作,假设元素值为e的新结点是s,top为栈顶指针
代码如下(示例):
Status Push(LinkStack *L,Selemtype e)
{
LinkStackPtr s=(LinkStackPtr )malloc(sizeof(StackNode));新结点
s->data=e;
s->next=L->top;新结点指向top指针所指地址
L->top=s;top指针指向新结点
L->count++;
return OK;
}
2.出栈操作
出栈操作,假设变量p用来储存要删除的栈顶结点,将栈顶指针下移一位,最后释放p即可;
若栈不空,则删除L的栈顶元素,用e返回其值,并返回OK,否则返回ERROR;
Status Pop(LinkStack *L,Selemtype *e)
{
LinkStackPtr p;新建结点p
if(StackEmpty(L))
return ERROR;
*e=L->top->data;
p=L->top;将栈顶赋值给p
L->top=L->top->next;将指针下移,指向下一个结点
free(p);释放p
L->count--;
return OK;
}
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。