严蔚敏C语言版数据结构栈的九个基本操作

PS:如果手机显示不完全可以用电脑查看

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

#define ok 1
#define error 0
#define  stack_init_size    100         //存储空间的初始分配量
#define  stackincrement     10			//增加内存空间时的增量

typedef int status;
typedef int selemtype;

typedef  struct {
	selemtype  *base;          //基址
	selemtype  *top;   //长度   (元素的个数)
	int stacksize;            //当前分配的存储容量    
}sqstack;

status initstack(sqstack &s)//构造一个空栈
{
	s.base = (selemtype*)malloc(stack_init_size*sizeof(selemtype));//申请栈底
	if (!s.base)
		return error;
	s.top = s.base;//使栈顶指向栈底,为空栈
	s.stacksize = stack_init_size;//栈的最大容量
	return ok;
}

status destroystack(sqstack &s)//将栈销毁
{
	while (s.top!=s.base)
	{
		*--s.top;
		free(s.top);
	}
	return ok;
}

status clearstack(sqstack &s)//将栈置空
{
	s.top = s.base;
	return ok;
}

status stackempty(sqstack s)//判断栈是否为空
{
	if (s.top == s.base)
		return ok;
	else
		return error;
}

void stacklength(sqstack s)//求栈的长度
{
	int i = s.top - s.base;
	printf("此时栈的长度为:%d\n",i);
}

status gettop(sqstack s, selemtype &e)//用e返回s的栈顶元素
{
	if (s.top == s.base)
		return error;//空栈的情况
	e = *(s.top-1);//栈顶指针指向的是栈顶的的下一个空间
	return ok;
}

status push(sqstack &s, selemtype e)//插入元素e为新的栈顶元素
{
	if (s.top - s.base >= s.stacksize)//栈满,追加空间
	{
		//s.base = (selemtype*)malloc(s.base, (s.stacksize + stackincrement)*sizeof(selemtype));
		if (!s.base)
			return error;//存储分配失败
		s.top = s.base + s.stacksize;
		s.stacksize += stackincrement;
	}
		*s.top++ = e;
		return ok;
}

status pop(sqstack &s, selemtype &e)//删除s的栈顶元素,并用e返回其值
{
	if (s.top == s.base)
		return error;
	e = *--s.top;
	return ok;
}

status printstack(sqstack s)//输出栈中的元素
{
	while (s.top != s.base)
	{
		printf("%3d\n", *--s.top);
	}
	return ok;
}

int main()
{
	int i;
	selemtype e;
	sqstack s;
	initstack(s);
	printf("将1~5依次圧入栈后的栈状态为:\n");
	for (i = 1; i <= 5; i++)
		push(s, i);
	printstack(s);
	stacklength(s);
	printf("取出栈顶元素后的栈为:\n");
	pop(s,e);
	printstack(s);
	stacklength(s);
	printf("被取出的栈顶元素是:%d\n", e);
	gettop(s, e);
	printf("此时新的栈顶元素为:%d\n", e);
	clearstack(s);
	if (stackempty(s) == ok)
		printf("置空后已是空栈!\n");
	else
		printf("置空失败,不是空栈!\n");
	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值