栈的链式存储的定义、初始化、判断空、入栈、出栈、读取栈顶元素、求栈长度、清空栈操作,
代码如下:
//栈的链式存储表示 因为入栈和出栈top都要改变,所以传参数的时候要传指针的地址
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int ElemType;
typedef struct Node{ //定义链栈的结点
ElemType data;
struct Node *next;
}LinkStack;
void Init_Stack(LinkStack *&top) //初始化栈,这时栈为空,所以栈指针也指向空
{
top=NULL;
}
int Stack_Empty(LinkStack *top) //判断栈是否为空,如果为空就返回1,否则返回0
{
if(top==NULL)
return 1;
else
return 0;
}
void Push_Stack(LinkStack *&top,ElemType x) //入栈操作
{
LinkStack *p;
p=(LinkStack*)malloc(sizeof(LinkStack));
p->data=x;
p->next=top;
top=p;
}
void GetTop_Stack(LinkStack *top) //读取栈顶元素
{
if(top==NULL)
{
printf("Stack is empty\n");
}
else
{
printf("%d\n",top->data);
}
}
void Pop_Stack(LinkStack *&top) //出栈操作
{
ElemType x;
LinkStack *p;
if(top==NULL)
{
printf("Stack is empty\n");
}
else
{
p=top;
top=top->next;
x=p->data;
free(p);
}
}
void Stack_Length(LinkStack *top) //求栈的长度
{
int x=0;
LinkStack *p;
p=top;
while(p!=NULL)
{
x++;
p=p->next;
}
printf("Stack length is %d\n",x);
}
void Clear_Stack(LinkStack *&top) //清空栈 释放所有结点
{
LinkStack *p;
while(top!=NULL)
{
p=top;
top=top->next;
free(p);
}
top=NULL;
}
int main()
{
LinkStack *top;
Init_Stack(top);
Stack_Length(top);
Push_Stack(top,1);
Push_Stack(top,2);
Push_Stack(top,3);
GetTop_Stack(top);
Pop_Stack(top);
GetTop_Stack(top);
Clear_Stack(top);
Stack_Length(top);
}