#include<stdio.h>
#include<stdlib.h>
#define max 6
typedef struct linkstack
{
int val;
struct linkstack *next;
}stack;
stack *p,*head;
stack* init(stack *p)
{
p=NULL;
return p;
}
void push(stack *p,int data)
{
p->val=data;
}
int empty(stack *p)
{
return p==NULL;
}
int pop(stack *p)
{
if(empty(p))
exit(0);
else
{
return p->val;
}
}
int main()
{
int i;
int data;
head=(stack*)malloc(sizeof(stack));
head=init(head);
for(i=0;i<max;i++)
{
p=(stack*)malloc(sizeof(stack));
scanf("%d",&data);
push(p,data);
head->next=p;
head=p;
}
int t;
for(i=0;i<max;i++)
{
t=pop(head);
head=head->next;
printf("%d ",t);
}
}
链栈的基本操作,初始化,入栈、判空、出栈、为什么没有输出结果?
供参考:
#include<stdio.h>
#include<stdlib.h>
#define max 6
typedef struct linkstack
{
int val;
struct linkstack *next;
}stack;
stack *p=NULL,*head=NULL; //修改
//stack* init(stack *p) 这个函数多余
//{
// p=NULL;
// return p;
//}
stack* push(stack *head,int data) //void push(stack *p,int data)//修改
{
stack* p=(stack*)malloc(sizeof(stack)); //修改
p->val=data; //修改
p->next=head; //修改
head=p; //修改
return head;
}
int empty(stack *p)
{
return p==NULL;
}
int pop(stack**p) //修改
{
int data;
if(empty((*p))) //修改
return 0; //exit(0); 修改
else
{
stack* pt=(*p); //修改
(*p)=(*p)->next; //修改
data=pt->val; //修改
free(pt); //修改
return data; //修改
}
}
int main()
{
int i;
int data;
//head=(stack*)malloc(sizeof(stack)); 多余
//head=init(head); 多余
for(i=0;i<max;i++)
{
scanf("%d", &data);
head=push(head,data); //修改
}
int t;
for(i=0;i<max;i++)
{
t=pop(&head); //修改
if (t) //head=head->next; //修改
printf("%d ",t);
else //修改
printf("栈已空!\n"); //修改
}
return 0;
}
typedef struct node
{
StackEntry entry;
struct node* next;
}Node, * NodePtr;