C语言顺序栈实现代码

顺序栈 :它是顺序表的一种,具有顺序表同样的存储结构,由数组定义,配合用数组下标表示的栈顶指针top(相对指针)完成各种操作。

sqstack.h  //顺序栈头文件(在内存中分配一段连续的存储空间存放入栈的相关数据)

#ifndef __LINKLIST_H__
#define __LINKLIST_H__

#include <stdio.h>
#include <stdlib.h>
typedef int datatype;   /*定义栈中数据元素的数据类型*/

typedef struct node{
	datatype *data;   /*用指针指向栈的存储空间*/
	int maxlen;   /*当前栈的最大元素个数,在这里单独列一个数据成员出来,方便程序员通过函数调用修改该值*/
	int top;    /*指示栈顶位置(数组下标)的变量*/
}sqstack;   /*顺序栈类型定义*/

extern sqstack* stack_create(int len);    //创建栈
extern int stack_empty(sqstack* s);    //判断栈是否为空(0表示非空,1表示空)
extern int stack_full(sqstack* s);    //判断栈是否为满(0表示非满,1表示满)
extern void stack_clear(sqstack* s);   //清空栈
extern int stack_push(sqstack* s,datatype value);  //入栈
extern datatype stack_pop(sqstack* s);   //出栈
extern datatype stack_top(sqstack* s);   // 获取栈顶的数据
extern void stack_free(sqstack *s);   //释放栈

#endif

sqstack.c  //顺序栈相关函数的实现方法

#include "sqstack.h"

sqstack* stack_create(int len)   //创建栈
{
	sqstack *s;

	if((s=(sqstack *)malloc(sizeof(sqstack)))==NULL)
	{
		puts("malloc failed");
		return NULL;
	}
	if((s->data=(datatype *)malloc(len*sizeof(datatype)))==NULL)
		
	{
		puts("malloc failed");
		return NULL;
	}
	s->maxlen=len;
	s->top=-1;

	return s;
}

int stack_empty(sqstack* s)    //判断栈是否为空(0表示非空,1表示空)
{
	return (s->top==-1 ? 1:0);
}
int stack_full(sqstack* s)    //判断栈是否为满(0表示非满,1表示满)
{
	return (s->top==(s->maxlen-1) ? 1:0);
}
void stack_clear(sqstack* s)    //清空栈
{
	s->top = -1;
}
int stack_push(sqstack* s,datatype value)    //入栈
{
	if(s->top==s->maxlen-1){
		puts("stack is full");
		return -1;
	}

	s->data[s->top+1]=value;
	s->top++;

	return 1;
}
datatype stack_pop(sqstack* s)     //出栈
{
	s->top--;
	return s->data[s->top+1];
}
datatype stack_top(sqstack* s)     // 获取栈顶的数据
{
	return(s->data[s->top]);
}
void stack_free(sqstack *s)      //释放栈
{
	free(s->data);
	s->data=NULL;

	free(s);
	s=NULL;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值