栈的链表实现

栈的定义

栈是一种特殊的线性表,是限定仅在表尾进行插入或删除操作的线性表。表尾端称为栈顶,表头称为栈底。不含元素的空表称为空栈。栈的修改是按后进先出的原则进行的。

用栈实现10进制向其他进制转换在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
#define ExchangeNum  16                     //改变ExchangeNum的值可实现10进制向不同进制的转换

typedef struct {                            //定义栈的数据类型
	int *base;                                //头指针也就是栈底
	int *top;                                   //尾指针也就是栈顶
	int stacksize;                               //栈的长度
}SqStack;


int InitStack(SqStack &S)                                    //********建立一个空栈********//
{
	S.base = (int *)malloc(100 * sizeof(int));                     //分配栈空间并返回栈底指针
	if (!S.base)exit(-1);                                          //分配失败
	S.top = S.base;                                                //将栈顶指针指向栈底指针
	S.stacksize = 100;                                              //栈的长度10
	return 0;
}
int PushStack(SqStack &S, int e)                               //**********压栈***********//
{
	if (S.top - S.base >= S.stacksize)                            //数据入栈的时候栈顶指针远离栈底,当S.top - S.base = S.stacksize时分配的栈满
	{
		S.base = (int *)realloc(S.base, (S.stacksize + 10) * sizeof(int));      //栈满时用realloc在原内存空间上继续追加内存
		if (!S.base)exit(-1);                                                   //追加内存失败                                  
		S.top = S.base + S.stacksize;                                           //栈满时栈顶的位置
		S.stacksize += 10;                                                      //栈的长度增加10
	}
	*S.top++ = e;                                                               //给栈顶空间赋值,并让栈顶指针加1
	return 0;
}

int PopStack(SqStack &S, int &e)                                    //***********出栈**************//
{
	if (S.top == S.base)return -1;                                        //栈空
	e = *--S.top;                                              //取出栈顶的值,并让栈顶指针减1
	return 0;
}

int StackEmpty(SqStack S)                                        //**********判断是否栈空*********//
{
	if (S.base == S.top)                                               
	{
		return 0;
	}
	return 1;
}


int main()                                                 //************主函数************// 
{
	SqStack S;                                                             //创建一栈数据类型
	int N,e;
	InitStack(S);                                                          //初始化栈
	printf("********10进制转换成%d进制********\n", ExchangeNum);
	printf("请输入需要转换的10进制数:");
	scanf("%d", &N);                                                       //输入需要转换的值
	while(N)
	{
		PushStack(S, N % ExchangeNum);                       //将数据依次压入栈         
		N = N / ExchangeNum;
	}
	while (StackEmpty(S))                                                 
   {
		PopStack(S, e);                                                        //将栈中数据Pop出直到栈空
		printf("%d", e);                                                  
	}
	while (1);
	return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值