栈的顺序表和进制转换

C语言栈操作与进制转换实操

1.实验所涉及的知识点

(1)C语言的指针知识。

 (2)顺序表的操作。

(3)栈的后进先出原理。

(4) 空栈、入栈、出栈、取栈顶元素等操作

(5) 栈的实际应用,进制转换

 

2.程序源码

#include "stdafx.h"
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
#define stack_size 5 //存储空间初始分配量
#define stack_add 1 //存储空间分配增量
#define error 0
#define ok 1
typedef int Elemtype;
typedef int Statuse;
typedef struct{     //定义栈
	Elemtype *base;  //在构造栈前和销毁后,base的值为NULL
	Elemtype *top;//栈顶指针
	int stacksize;//当前已分配的存储空间
}sql_stack;
Statuse stack_creat(sql_stack &L)//构建空栈L
{
	L.base=(Elemtype *)malloc(stack_add*sizeof(Elemtype));
	if(!L.base)
		exit (error);
	L.top=L.base;
	L.stacksize=stack_size;
	return ok;
}
Statuse stack_push(sql_stack &L,int m)//插入元素m为新的栈顶元素
{
	if((L.top-L.base)>=L.stacksize)//栈满,追加存储空间
	{	
		L.base=(Elemtype *)realloc(L.base,(stack_add+L.stacksize)*sizeof(Elemtype));
		if(!L.base)
			exit(0);
		L.top=L.base+L.stacksize;
		L.stacksize+=stack_add;
	}
	*L.top=m;
	L.top++;
	return ok;
}
Statuse stack_pop(sql_stack &L,int &n)//若栈不空,则删除L的栈顶元素,并用n返回其值
{
	if(L.top==L.base)
		return error;
	L.top--;
	n=*L.top;
	return ok;
}
void stack_convert()//进制转换
{
	sql_stack L;
	stack_creat(L);//重新创建空的栈,分配内存空间
	int k,n,e;
	printf("/n请输入你要转换的数字:");
	scanf("%d",&k);
	printf("请输入你要转换的进制:");
	scanf("%d",&n);
	while(k)
	{
		stack_push(L,k%n);
		k=k/n;
	}
	
	for(int i=0;i<L.stacksize;i++)
	{
		stack_pop(L,e);
		printf("%d",e);
	}
}
int main()
{
	sql_stack L;
	stack_creat(L);
	int k,e;
	printf("入栈的元素:/n");
	for(int i=0;i<L.stacksize;i++)
	{
		scanf("%d",&k);
		stack_push(L,k);
	}
	printf("出栈的元素:");
	for(int i=0;i<L.stacksize;i++)
	{
		stack_pop(L,e);
		printf("%d",e);
	}
	stack_convert();//转换进制
	printf("/n");
	system("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值