北京seo网站推广费用,51网址还有吗,网站挂马解决,厦门人才网官网登录文章目录1 链栈定义2 链栈基本操作3 链栈代码实现1 链栈定义
链栈#xff1a;采用链式存储的栈称为链栈
在一个链栈中#xff0c;栈底就是链表的最后一个结点#xff0c;而栈顶总是链表的第一个结点。因此#xff0c;新入栈的元素即为链表新的第一个结点#xff0c;只要…
文章目录1 链栈定义2 链栈基本操作3 链栈代码实现1 链栈定义
链栈采用链式存储的栈称为链栈
在一个链栈中栈底就是链表的最后一个结点而栈顶总是链表的第一个结点。因此新入栈的元素即为链表新的第一个结点只要系统还有存储空间就不会有栈满的情况发生。 链栈的优点在于多个栈共享存储空间和提高其效率且不存在栈满上溢的情况通常采用单链表实现并规定所有操作都是在单链表的表头进行的。 2 链栈基本操作
初始化链栈
void InitStackLinkStack*s
{*sLinkSNode*mallocsizeofLinkSNode*s-nextNULL
}判断栈空
int LinkStackEmptyLinkStack*S
{return S-topNULL
}入栈操作
void PushLinkStack sint e
{LinkStack pLinkStackmallocsizeofLinkSNodep-dataep-nexts-nexts-nextp
}将要入栈的元素构造结点p然后将其插入到栈顶指针s之后让s始终指向新插入的结点保证s永远是栈顶指针 出栈操作
int PopLinkStack sint*e
{LinkStack pifEmptyStacksreturn ERRORpS-next*ep-datas-nextp-nextfreepreturn OK
}入出都要保证s永远是栈顶指针所有栈队列的操作都要注意入栈队判满出栈队判空的检查是否为满满时不进是否为空空时不出 取栈顶元素
int Get TopLinkStack sint*e
{ifEmptyStacksreturn ERROR*es-next-datareturn OK
}3 链栈代码实现
#include stdio.h
#include stdlib.htypedef int ElementType; // 特殊的线性表只有在栈顶一端进行插入删除
typedef struct node {ElementType data;struct node *Next;
} *Stack;Stack InitStack(void)
{Stack s (Stack)malloc(sizeof(struct node));s-data 0;s-Next NULL;
}void Push(Stack s, ElementType e) //保证S永远是栈顶指针
{Stack p (Stack)malloc(sizeof(struct node));p-data e;p-Next s-Next;s-Next p;
}void Pop(Stack s, ElementType *e) //保证S永远是栈顶指针
{if (s-Next NULL) {return;}Stack p s-Next;*e p-data;s-Next p-Next;free(p);
}void PrtStack(Stack s)
{Stack p s-Next;while (p) {printf(%d , p-data);p p-Next;}printf(\n);
}int main(void)
{ElementType e;Stack s InitStack();printf(please input a element :);scanf(%d, e);Push(s, e);PrtStack(s);Pop(s, e);printf(Pop a element : %d , e);return 0;
}