数据结构——栈和队列——顺序栈

顺序栈代码

main.c

#include <stdio.h>
#include "sqStack.h"
int main()
{
	Stack *s = initStack();
	sElemType data;
	while(1)
	{
		scanf("%d",&data);
		if(data == 0)
		{
			break;
		}
		push(s, data);
	}

	sElemType x;
	while(! isEmtpy(s))
	{
		if(pop(s,&x) == 0)
		{
			printf("%d ",x);
		}
	}

	destroyStack(s);	
	return 0;
}

sqStack.c

#include<stdio.h>
#include<stdlib.h>
#include"sqStack.h"

//本.c文件实现顺序栈的基本功能函数


/*
	功能:初始化一个空栈
	参数:
		无
	返回值
		失败返回NULL
		成功返回栈的头结点的地址
*/
Stack * initStack()
{
	Stack * s = (Stack *)malloc(sizeof(Stack));
	if(s == NULL)
	{
		return NULL;
	}
	s->top = -1;//现在是一个空栈,栈顶元素不存在,所以给一个不存在的下标
	return s;
}

/*
	功能:清空一个栈
	参数:
		@s	栈的头结点地址
	返回值
		成功返回0
		失败返回-1
*/
int clearStack(Stack * s)
{
	if(s == NULL)
		return -1;	

	s->top = -1;
	return 0;
}


int destroyStack(Stack * s)
{
	if(s == NULL)
		return -1;	

	s->top = -1;
	free(s);
	return 0;
}


int push(Stack * s ,sElemType x)
{
	if(s == NULL || s->top == MAX_ELEM_NUM-1)//栈不存在,或者满了
		return -1;

	s->stack[s->top+1] = x;
	s->top++;

	return 0;
}

int pop(Stack * s,sElemType * x)
{
	if(s == NULL || s->top == -1)//栈不存在,或者为空
		return -1;

	*x = s->stack[s->top];//保存栈顶元素到x指向的空间
	s->top --;//出栈
	return 0;
}

int isEmtpy(Stack * s)
{
	if(s == NULL || s->top == -1)//栈不存在或者为空
		return 1;

	return 0;
}


int getTop(Stack * s,sElemType * x)
{
	if(s == NULL || s->top == -1)//栈不存在,或者为空
		return -1;

	*x = s->stack[s->top];//保存栈顶元素到x指向的空间
	//s->top --;//出栈
	return 0;
}


sqStack.h



#ifndef __SQ_STACK_H__
#define __SQ_STACK_H__

typedef int sElemType;
#define MAX_ELEM_NUM 100
struct Sqstack
{
	sElemType stack[MAX_ELEM_NUM];//顺序栈
	int top;//栈顶元素在stack数组中的下标
};

typedef struct Sqstack Stack;//取别名

/*
	功能:初始化一个空栈
	参数:
		无
	返回值
		失败返回NULL
		成功返回栈的头结点的地址
*/
Stack *   initStack();

/*
	功能:清空一个栈
	参数:
		@s	栈的头结点地址
	返回值
		成功返回0
		失败返回-1
*/
int clearStack(Stack * s);

/*
	功能:销毁一个栈
	参数:
		@s	栈的头结点地址
	返回值
		成功返回0
		失败返回-1
*/

int destroyStack(Stack * s);

/*
	功能:入栈
	参数:
		@s	栈的头结点地址
		@x	待入栈的数据
	返回值:
		成功返回0
		失败返回-1
*/
int push(Stack * s ,sElemType x);

/*
	功能:出栈
	参数:
		@s	栈的头结点地址
		@x	一个指针,指向的内存空间用来保存待出栈元素
	返回值:
		成功返回0
		失败返回-1
*/

int pop(Stack * s,sElemType * x);
/*
	判断栈s是否为空,为空返回1,不为空返回0
*/
int isEmtpy(Stack * s);

/*
	功能:获取栈顶元素
	参数:
		@s	栈的头结点地址
		@x	一个指针,指向的内存空间用来保存栈顶元素
	返回值:
		成功返回0
		失败返回-1
*/

int getTop(Stack * s,sElemType * x);

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值