基于数据结构(C语言)实现栈的基本操作和数值转换应用
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<limits.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status; //函数类型
typedef int Boolean;//布尔型 值为TRUE 或 FALSE
typedef int SElemType;//栈元素类型为整型 (数值转换)
//typedef char SElemType;//栈元素类型为字符型 (括号匹配)
/*******************栈的基本操作**********************/
#define STACK_INIT_SIZE 10 //初始分配量
#define STACKINCREMENT 2 //增量
typedef struct SqStack
{
SElemType * base;//栈底指针
SElemType * top;//栈顶指针
int stacksize;//当前存储空间
}SqStack;
Status InitStack(SqStack *S)
{ /* 构造一个空栈S */
(*S).base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!(*S).base)
exit(OVERFLOW); /* 存储分配失败 */
(*S).top=(*S).base;
(*S).stacksize=STACK_INIT_SIZE;
return OK;
}
Status ClearStack(SqStack *S)
{ /* 把S置为空栈 */
(*S).top=(*S).base;
return OK;
}
Status StackEmpty(SqStack S)
{ /* 若栈S为空栈,则返回TRUE,否则返回FALSE */
if(S.top==S.base)
return TRUE;
else
return FALSE;
}
int StackLength(SqStack S)
{ /* 返回S的元素个数 */
return S.top-S.base;
}
Status Push(SqStack *S,SElemType e)
{ /* 插入元素e为新的栈顶元素 */
if((*S).top-(*S).base>=(*S).stacksize) /* 栈满,追加存储空间 */
{
(*S).base=(SElemType *)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!(*S).base)
exit(OVERFLOW); /* 存储分配失败 */
(*S).top=(*S).base+(*S).stacksize;
(*S).stacksize+=STACKINCREMENT;
}
*((*S).top)++=e;
return OK;
}
Status Pop(SqStack *S,SElemType *e)
{ /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */
if((*S).top==(*S).base)
return ERROR;
*e=*--(*S).top;
return OK;
}
void conversion()
{ /* 自定义数值转换实现 */
SqStack s;
unsigned n; /* 非负整数 */
unsigned u;/* 目标进制 */
SElemType e;
InitStack(&s); /* 初始化栈 */
printf("n(正整数) = ");
scanf("%u",&n);
printf("请输入想要转化的进制(例如 2,8,16进制)= ");
scanf("%u",&u);
while(n&&u) /* 当n&&u不等于0 */
{
Push(&s,n%u); /* 入栈n除以u的余数(u进制的低位) */
n=n/u;
}
while(!StackEmpty(s)) /* 当栈不空 */
{
Pop(&s,&e); /* 弹出栈顶元素且赋值给e */
if(e<=9)
printf("%d",e); /* 输出e */
else
printf("%c",e+55);/* 化为16进制e-9+64 */
}
printf("\n");
}
main()
{
conversion();
}
/*
如有不足,多多指教。
(ง •̀_•́)ง
*/