无头结点的顺序栈(C语言实现)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef int data_type;

//设置管理结构体
typedef struct node
{
	data_type* Enter;
	int size;
	int top; //栈顶元素的下标
}Node;

//初始化
Node stack_init(int size_of_stack)
{
	Node stack;
	stack.Enter = (Node*)calloc(size_of_stack, sizeof(data_type));
	stack.size = size_of_stack;
	stack.top = 0;

	return stack; // 返回值,而不是指针,因为stack变量存在栈空间会被回收。返回地址无用
}

//入栈
Node push_stack(Node stack, data_type num)
{
	if (stack.top >= stack.size - 1)
	{
		printf("超出内存,请更改大小!\n");
		return stack;
	}

	//printf("输入的数据为%d\n", num);
	//*(stack.Enter + stack.top) = num; //等价于以下语句
	stack.Enter[stack.top] = num;
	//printf("%d", *(stack.Enter + stack.top));

	stack.top++;

	return stack;  //返回管理结构体变量
}

Node pop_stack(Node stack)
{
	if (stack.top == 0)
	{
		printf("栈为空!!!\n");
		return stack;
	}

	stack.top --;
	data_type tmp = stack.Enter[stack.top]; //将出栈的值返回给函数

	printf("%d", tmp);

	return stack;
}

int main()
{
	int n = 5; //n为个数
	Node stack = stack_init(n);

	//入栈
	int num = 1688; //输入的数据为168,入栈
	while (1)
	{
		stack = push_stack(stack, num % 8);  //把 管理结构体和数据 输入进函数
		
		//输出取余的值
		num = num / 8;
		if (num < 8)
		{
			stack = push_stack(stack, num);
			//printf("%d", num);
			break;
		}
	}

	//出栈
	while(1)
	{
		stack = pop_stack(stack);
		if (stack.top == 0) 
		{
			//printf("栈为空\n");
			break;
		}	
	}
	printf("\n");

	system("pause");
	return EXIT_SUCCESS;
}
  • 功能描述:输入int型数据n取余后,以8进制入栈,再全部出栈并打印
  • 入栈出栈时,记得返回新的管理结构体stack
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值