数据结构随笔(栈的实现C语言)

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOAW -1

#define LENGTH 5

typedef struct stack
{
	int* element;
	int size;
	int top;
}stack;

typedef int status;
typedef int elemtype;

//初始化栈
status initialStack(stack& s, int size)
{
	s.element = (elemtype*)malloc(size * sizeof(elemtype));
	if (s.element == NULL)
	{
		printf("OVERFLOAW");	//内存区满申请内存失败
		return OVERFLOAW;
	}
	s.top = 0;
	s.size = size;
	return OK;
}

//销毁栈
status destoryStack(stack& s)
{
	free(s.element);
	s.element = NULL;
	return OK;
}

//判断是否为空
status isEmpty(stack& s)
{
	if (s.top == 0)
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}

//清空栈
void clearStack(stack& s)
{
	if (s.top == 0)
	{
		return;
	}
	s.top = 0;
	s.size = 0;
}

//元素进栈
status pushStack(stack& s, elemtype e)
{
	if (s.top >= s.size)
	{
		elemtype* newbase;
		newbase = (elemtype*)realloc(s.element,(s.size + 1) * sizeof(elemtype));
		if (!newbase) {
			printf("OVERFLOW");
			return OVERFLOAW;
		}
		s.element = newbase;
		s.size++;
	}
	s.element[s.top++] = e;
	return OK;
}

//取栈顶的元素并返回
elemtype getTop(stack& s,elemtype &e)
{
	if (0 == s.top)
	{
		return ERROR;
	}
	e = s.element[s.top - 1];
	return e;
}

//出栈并返回
status popStack(stack& s, elemtype& e) {
	if (0 == s.top)
	{
		return ERROR;
	}
	e = s.element[--s.top];
	return e;
}



int main()
{
	stack s;

	int size,i;
	elemtype e, eArray[LENGTH] = { 1,2,3,4,5 };
	size = LENGTH;
	printf("待测试元素为\n");
	for ( i = 0; i < LENGTH; i++)
	{
		printf("%d\n", eArray[i]);
	}
	printf("\n");

	if (!initialStack(s,size))
	{
		printf("初始化栈失败\n");
		exit(0);
	}
	printf("已初始化顺序栈\n");

	//入栈
	for (i = 0; i < s.size; i++)
	{
		if (!pushStack(s, eArray[i]))
		{
			printf("%d入栈失败\n", eArray[i]);
			exit(0);
		}
	}
	printf("已入栈\n");

	//取栈顶的元素
	printf("栈顶元素为%d", getTop(s, e));

	//栈顶出栈
	printf("出栈元素为\n");
	for (i = 0; i < s.size; i++)
	{
		printf("%d\t", popStack(s, e));
	}
	printf("\n");

	clearStack(s);
	printf("已清空栈\n");

	return 0;
}

根据top的位置来确定栈顶,通过改变top的位置来定位栈顶;
下面是实现结果

待测试元素为
1
2
3
4
5

已初始化顺序栈
已入栈
栈顶元素为5出栈元素为
5       4       3       2       1
已清空栈
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值