前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >期末考试必备-----数据结构---栈的模拟(初始化,Push,Pop),栈的运用(转换进制)

期末考试必备-----数据结构---栈的模拟(初始化,Push,Pop),栈的运用(转换进制)

作者头像
用户11039529
发布2024-04-11 08:20:26
670
发布2024-04-11 08:20:26
举报
文章被收录于专栏:算法学习日常算法学习日常

数据结构专栏:数据结构_脑子不好的小菜鸟的博客-CSDN博客

代码语言:javascript
复制
					/*栈的相关操作*/

#define ok 1
#define error 0
#define overflow -2

typedef int selemtype;
typedef int status;

#define InitSize 100
#define AddSize 50

typedef struct Stack
{
	selemtype* base;
	selemtype* top;
	int stacksize;
}Stack;

status InitStack(Stack& st)
{
	st.base = (selemtype*)malloc(InitSize * sizeof(selemtype));
	if (st.base == NULL)
		exit(overflow);

	st.stacksize = InitSize;
	st.top = st.base;
	return ok;
}

status Push1(Stack& st, int n)
{
	int i;
	selemtype e;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &e);

		if (st.top - st.base >= st.stacksize)
		{
			st.base = (selemtype*)realloc(st.base/*realloc要两个参数*/, (st.stacksize + AddSize) * sizeof(selemtype));
			if (st.base == NULL)
			{
				printf("栈已满,内存分配失败\n");
				exit(error);
			}
			st.stacksize = st.stacksize + AddSize;
			st.top = st.base + st.stacksize;
		}

		*st.top = e;
		st.top++;
	}
	return ok;
}

status Push(Stack& st, selemtype e)
{
	if (st.top - st.base >= st.stacksize)
	{
		st.base = (selemtype*)realloc(st.base/*realloc要两个参数*/, (st.stacksize + AddSize) * sizeof(selemtype));
		if (st.base == NULL)
		{
			printf("栈已满,内存分配失败\n");
			exit(error);
		}
		st.stacksize = st.stacksize + AddSize;
		st.top = st.base + st.stacksize;
	}
	
	*st.top = e;
	st.top++;

	return ok;
}


status Pop(Stack& st, selemtype&/*注意要带出来,要用引用*/ e)
{
	if (st.top == st.base)
	{
		printf("栈空,弹出失败\n");
		return error;
	}

	e = *(--st.top);
}

void conversion(selemtype num, int jz)
{
	Stack st;
	InitStack(st);

	while (num)
	{
		Push(st, num%jz);/*不知道元素个数的*/
		num /= jz;
	}
	
	while (st.top != st.base)
	{
		selemtype e;
		Pop(st, e);
		printf("%d", e);
	}
}

int main()
{
	Stack st;
	InitStack(st);
	printf("请输入你要放入的元素个数和放入的元素:\n");
	int n, i;
	scanf("%d", &n);
	Push1(st, n);/*知道元素个数的Push*/
	selemtype e;//栈顶元素
	if (Pop(st, e))
	{
		printf("栈顶元素为:%d\n", e);
	}

	//进制转换
	printf("请输入你要转换的数字和你要转换成的进制\n");
	selemtype num, jz;
	scanf("%d%d", &num, &jz);
	conversion(num, jz);
	return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档