链栈的初始化,利用的是头插法,进行的单链表的初始化 (ps:本篇以带头结点的方式)
typedef struct LinkNode{
int data;
struct LinkNode *Next;
}*Stack ;
初始化:
void Init_Stack(){
Stack L=(Stack *)malloc (Sizeof(Stack));
if(L.Next!=NULL)
L.Next=NULL;
}
入栈操作:
void InsertStack(Stack * s,int x) //入栈操作
{
Stack *top=S; //栈顶指针
Stack *r=(Stack *)malloc (sizeof(Stack)); //新建一个结点
r.data=x; //把将要入栈的数据放入结点
r->next=top; //将节点插在栈顶,也就是单链表的头部
top=r; // 移动栈顶指针指针
}
出栈操作:也就是对应单链表的删除
void DelectStack(Stack *s,int &x) //此处的x为栈顶删结点除后的值带回
{
Stack *p;
p=s;
s=s->next; //栈顶指针指向下一个结点
x=p.data; //栈顶值带回
free(p); //释放栈顶结点
return s; //返回栈顶指针
}
获取栈顶元素:
void GetElemTop(Stack *S,int &x)
{
x=S.data; //带回栈顶元素
}