#include <stdio.h>
#include <stdlib.h>
typedef struct Node{//结构体的定义
int data;
struct Node *next;
}Node;
//链栈的初始化
void Init(Node *p,int n){
//建立了链栈的头结点
p=(Node *)malloc(sizeof(Node));
p->data=0;
p->next=NULL;
}
//链栈的创建
Node* Create(Node *p,int e){//传入头指针以及要建立的入栈元素e
Node *s;//定义一个新的节点
s=(Node *)malloc(sizeof(Node));//为新的节点开辟空间
//头插法
s->data=e;
s->next=p->next;
p->next=s;
return p;
}
//出栈
Node* Pop(Node *p,int *x){
Node *r;
r=p->next;//r指向链栈的第一个元素
if(r==NULL){
printf("False");
return p;
}
else{
p->next=r->next;//出栈第一个元素
*x=r->data;//存储r的数据放在x中
free(x);//释放x所在的空间
}
return p;
}
//输出(遍历)函数
void Output(Node *p){
while(p->next!=NULL){
p=p->next;//指向第一个元素
printf("%d",p->data);
}
}
int main(){
int n,e,k=0;
int *x;//存放出栈元素
printf("输入链栈的节点数");
scanf("%d",&n);
Node *top;
Init(top,n);//对于栈进行初始化
while(k<n){//入栈(多个元素)
printf("输入入栈元素:");
scanf("%d",&e);
Create(top,e);
k++;
}
Pop(top,x);//出栈
Output(top); //输出(遍历)栈中的元素
}
最后只有输入元素,没有输出元素
能够实现基本的入栈和出栈操作
修改处见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{//结构体的定义
int data;
struct Node *next;
}Node;
//链栈的初始化
void Init(Node **p,int n){ //修改:void Init(Node *p,int n)
//建立了链栈的头结点
(*p)=(Node *)malloc(sizeof(Node));//修改
(*p)->data=0; //修改
(*p)->next=NULL; //修改
}
//链栈的创建
Node* Create(Node *p,int e){//传入头指针以及要建立的入栈元素e
Node *s;//定义一个新的节点
s=(Node *)malloc(sizeof(Node));//为新的节点开辟空间
//头插法
s->data=e;
s->next=p->next;
p->next=s;
return p;
}
//出栈
Node* Pop(Node *p,int *x){
Node *r;
r=p->next;//r指向链栈的第一个元素
if(r==NULL){
printf("False");
return p;
}
else{
p->next=r->next;//出栈第一个元素
*x=r->data;//存储r的数据放在x中
free(r);//free(x);//释放x所在的空间
}
return p;
}
//输出(遍历)函数
void Output(Node *p){
while(p->next!=NULL){
p=p->next;//指向第一个元素
printf("%d",p->data);
}
}
int main()
{
int n,e,k=0;
int x;//int *x;//存放出栈元素 修改
printf("输入链栈的节点数");
scanf("%d",&n);
Node *top;
Init(&top,n);//对于栈进行初始化 修改
while(k<n){//入栈(多个元素)
printf("输入入栈元素:");
scanf("%d",&e);
top = Create(top,e); //修改
k++;
}
top = Pop(top,&x);//出栈 //修改
printf("Pop data:%d\n",x); //修改
Output(top); //输出(遍历)栈中的元素
return 0;
}