015. 2021.7.9 链式栈

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;
	
}












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值