2023-03-30-链栈LinkStack的实现
//链栈对钩
#include <stdio.h>
#include <malloc.h>
#include <stdbool.h>
typedef struct SNode
{
int data;
struct SNode *next;
}SNode,*LinkStack;
//栈的主要操作是在栈顶进行插入和删除,所以将链表的头部看为栈顶最合适
bool initLinkStack(LinkStack *S)//链表初始化,将头指针所在的地址传进来
{
*S=NULL;//头指针应该指向栈顶,所以初始化赋为NULL
}
void Push(LinkStack *S,int value)//入栈操作
{
SNode *p;
p=(SNode *)malloc(sizeof(SNode));
p->next=*S;
p->data=value;
(*S)=p;
}
bool Pop(LinkStack *S,int *e)//出栈操作
{
if((*S)==NULL)
{
return false;
}
else
{
(*e)=(*S)->data;
SNode *q;//存储删除的节点来进行释放
q=*S;
*S=(*S)->next;
free(q);
return true;
}
}
int GetTop(LinkStack S)//获取栈顶元素
{
if(S!=NULL)
{
return S->data;
}
}
int main()
{
LinkStack S;
initLinkStack(&S);
Push(&S,666);
Push(&S,999);
int *e;
int a=0;
e=&a;//指针初始化
while(S!=NULL)
{
Pop(&S,e);
printf("%d \n",*e);
}
return 0;
}
C++:
//链栈
#include <stdio.h>
#include <malloc.h>
#include <stdbool.h>
typedef struct SNode
{
int data;
struct SNode *next;
}SNode,*LinkStack;
//栈的主要操作是在栈顶进行插入和删除,所以将链表的头部看为栈顶最合适
bool initLinkStack(LinkStack &S)//链表初始化,将头指针所在的地址传进来
{
S=NULL;//头指针应该指向栈顶,所以初始化赋为NULL
return true;
}
void Push(LinkStack &S,int value)//入栈操作
{
SNode *p;
p=(SNode *)malloc(sizeof(SNode));
p->next=S;
p->data=value;
S=p;
}
bool Pop(LinkStack &S,int *e)//出栈操作
{
if(S==NULL)
{
return false;
}
else
{
(*e)=S->data;
SNode *q;//存储删除的节点来进行释放
q=S;
S=S->next;
free(q);
return true;
}
}
int GetTop(LinkStack S)//获取栈顶元素
{
if(S!=NULL)
{
return S->data;
}
return 0;
}
int main()
{
LinkStack S;
initLinkStack(S);
Push(S,666);
Push(S,999);
int *e;
int a=0;
e=&a;//指针初始化
while(S!=NULL)
{
Pop(S,e);
printf("%d \n",*e);
}
return 0;
}