/*栈是栈后入先出的结构,只能从栈顶进出,因此,把链表的头部作为栈顶,尾部作为栈底比较方便*/
#include<stdio.h>
#include<stdlib.h>
typedef struct StackNode
{
int data;
struct StackNode *next;
}StackNode,*LinkStack;
//1.初始化
void InitStack(LinkStack &S)
{
S=NULL;//没有必要设置头结点,直接将栈顶指针置空即可
}
//入栈
void Push(LinkStack &S,int e)
{
//头插法
StackNode *p;
p=(StackNode *)malloc(sizeof(StackNode));
p->data=e;
p->next=S;
S=p;
}
//出栈
void Pop(LinkStack &S,int *e)
{
StackNode *p;
if(S==NULL) printf("栈空,出栈失败");
*e=S->data;
p=S;
S=S->next;
free(p);
}
//取栈顶元素
int GetTop(LinkStack S)
{
if(S!=NULL)
return S->data;
}
//遍历
void Print(LinkStack S)
{
StackNode *p;
p=S;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
}
int main()
{
int x;
printf("注意:链表的头部为栈顶,链表的尾部为栈底。\n");
LinkStack S;
InitStack(S);
Push(S,12);
Push(S,13);
Push(S,14);
Print(S);
Pop(S,&x);
printf("\n%d出栈,剩下的元素是:",x);
Print(S);
printf("\n栈顶元素是:%d",GetTop(S));
return 0;
}
【数据结构C语言】链栈的表示和实现
最新推荐文章于 2022-07-26 22:11:17 发布