typedef struct lstack{
int data;
struct lstack* next;
}lstack, * lstackll; //结构体定义
void init(lstackll &s) //初始化
{
s=NULL;
}
//。。。中间部分省略
void out (lstackll &s, int i, int &a) //出栈
{
if(s ->next == NULL) //如果最后一个数据出栈之后是空栈
{
a = s ->data;
s=NULL; //为什么这个部分不行,要改成free(s); lstackll s=NULL;
}
lstackll l = s ->next;
a = s->data;
free(s);
s = l;
}
以下是全部代码
#include <iostream>
#include<stdlib.h>
using namespace std;
typedef struct lstack{
int data;
struct lstack* next;
}lstack, * lstackll;
void init(lstackll &s) //初始化
{
s=NULL;
}
void more(lstackll &s, int e) //入栈
{
if(s == NULL)
{
s = (lstack* )malloc(sizeof(lstack));
s ->data = e;
s ->next = NULL;
return;
}
lstackll l = s;
s =(lstack* )malloc(sizeof(lstack));
s ->data = e;
s ->next = l;
}
void out (lstackll &s, int i, int &a) //出栈
{
if(s ->next == NULL) //如果出栈之后是空栈
{
a = s ->data;
free(s);
lstackll s=NULL; //需要重新声明s并初始化,方便以后使用
}
lstackll l = s ->next;
a = s->data;
free(s);
s = l;
}
int main()
{
lstackll s;
init(s);
more(s,999); //测试用 栈底
for (int i = 0; i < 10; i++) //循环入栈
more(s,i);
for (int i = 0; i < 11; i++) //出栈
{
int a = 0;
out(s,i,a);
cout<<a<<endl;
}
more(s,13); //判断能否继续使用
cout<<"\n"<<s->data<<endl;
return 0;
}