栈
栈的定义
栈是一种特殊的线性表,是限定仅在表尾进行插入或删除操作的线性表。表尾端称为栈顶,表头称为栈底。不含元素的空表称为空栈。栈的修改是按后进先出的原则进行的。
用栈实现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;
}