main.c
#include<stdio.h>
void func(int *p)
{
int x;
x = 10;//
*p = x;
//return x;
}
int main()
{
int y ;
func(&y);
}
list.h
#ifnedf __LKSTACK_H__
#define __LKSTACK_H__
typedef int sElemType;
struct stackNode
{
sElemType data;//保存数据
struct sNode * next ;//保存下一个元素的地址
};
typedef struct stackNode sNode;
struct lkStack
{
sNode * top;//保存栈顶元素的地址
//sNode * bottom;//保存栈底元素的地址,如果需要的话
int n;//元素个数
};//头结点 用来保存栈中有用的信息
typedef struct lkStack Stack;//取别名
#endif
list.c
#include<stdio.h>
#include"lkStack.h"
Stack* initStack()
{
Stack * s = (Stack*)malloc(sizeof(Stack));
s->top = NULL;
s->n = 0;
return s;
}
/*
功能:入栈
参数
@s 栈的头结点指针
@x 要入栈的数据
返回值
成功返回0
失败返回-1(栈已满)
*/
int push(Stack * s,sElemType x)
{
//1,为新节点分配空间
sNode * p = (sNode *)malloc(sizeof(sNode));
//2,为新节点赋值
p->data = x;
p->next = NULL;
//3,入栈
if(s->n == 0)
{
s->top = p;
}
else
{
p->next = s->top;
s->top = p;
}
s->n ++;
return 0;
}
/*
功能:出栈
参数
@s 栈的头结点指针
@x 传入一个指针,用来保存栈顶元素
返回值
成功返回0
失败返回-1(栈为空)
*/
int pop(Stack * s,sElemType * x)
{
if(s == NULL || s->n == 0)
return -1;
*x = s->top->data;
sNode * p = s->top;
s->top = p->next;
p->next = NULL;
free(p);
s->n--;
return 0;
}
/*
功能:清空一个栈(把栈内元素清空)
参数
@s 栈的头结点指针
返回值
成功返回0
失败返回-1(栈为空)
*/
int clearStack(Stack * s)
{
if(s == NULL)
return -1;
sNode * p = s->top;
while(p)
{
s->top = p->next;
p->next = NULL;
free(p);
p = s->top;
}
s->n = 0;
return 0;
}
/*
功能:销毁一个栈(把栈内元素清空,并把栈的头结点释放)
参数
@s 栈的头结点指针
返回值
成功返回0
失败返回-1(栈为空)
*/
int destroyStack(Stack * s)
{
if(s == NULL)
return -1;
sNode * p = s->top;
while(p)
{
s->top = p->next;
p->next = NULL;
free(p);
p = s->top;
}
s->n = 0;
s->top = NULL;
free(s);
return 0;
}
/*
功能:判断一个栈是否为空
参数
@s 栈的头结点指针
返回值
为空返回1
不为空返回0
*/
int isEmpty(Stack * s)
{
if(s == NULL || s->n == 0)
return 1;
return 0;
}
/*
功能:获取栈顶元素
参数
@s 栈的头结点指针
返回值
失败返回-1
成功返回0
*/
int getTop(Stack* s,sElemType *x)
{
if(s == NULL || s->n == 0)
return -1;
*x = s->top->data;
sNode * p = s->top;
return 0;
}