//链栈的建立及其出栈入栈操作
#include <cstdio>
#include <stdlib.h>
typedef int StackElementType ;
typedef struct SNode
{
StackElementType data;
struct SNode * next;
} LinkStackNode,* LinkStack; //定义链表的结点,链表头
#include <cstdio>
#include <stdlib.h>
typedef int StackElementType ;
typedef struct SNode
{
StackElementType data;
struct SNode * next;
} LinkStackNode,* LinkStack; //定义链表的结点,链表头
void InitStack (LinkStack *top) //初始化链表
{
*top=(LinkStack)malloc(sizeof(SNode));
(*top)->next=NULL;
}
{
*top=(LinkStack)malloc(sizeof(SNode));
(*top)->next=NULL;
}
int PushStack (LinkStack top,StackElementType x) //链栈的进栈 头插法
{
LinkStackNode *temp;
temp=(LinkStackNode *)malloc(sizeof(LinkStackNode));
if(temp==NULL) return 0;
temp->data=x;
temp->next=top->next;
top->next=temp;
return 1;
}
{
LinkStackNode *temp;
temp=(LinkStackNode *)malloc(sizeof(LinkStackNode));
if(temp==NULL) return 0;
temp->data=x;
temp->next=top->next;
top->next=temp;
return 1;
}
int PopStack(LinkStack top, StackElementType *x) //链栈的出栈 从头上开始出
{
LinkStackNode *temp;
temp=top->next;
if(temp==NULL)
return 0;
top->next=temp->next;
*x=temp->data;
free(temp);
return 1;
}
{
LinkStackNode *temp;
temp=top->next;
if(temp==NULL)
return 0;
top->next=temp->next;
*x=temp->data;
free(temp);
return 1;
}
int main()
{
LinkStack top; //top为链栈
InitStack(&top);//初始化链栈
int num,n;
int num,n;
printf("输入要输入链栈的数的个数及要输入的数\n");
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&num);
if(!PushStack(top,num)) printf("链栈满\n");
}
printf("输入的数据依次出链栈\n");
while(PopStack(top,&num)) printf("%d ",num);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&num);
if(!PushStack(top,num)) printf("链栈满\n");
}
printf("输入的数据依次出链栈\n");
while(PopStack(top,&num)) printf("%d ",num);
return 0;
}
}