数据结构c语言-顺序栈(实现进制转换)
前言
一个菜鸡写出来的顺序栈,写篇文章记录一下
最后是顺序栈实现任意进制转换的代码
提示:以下是本篇文章正文内容,下面案例可供参考
一、顺序栈数据结构定义
typedef int DataType;
struct seqStack
{//有3个数据成员
int MAXNUM;//用于记录顺序栈中能存放的最大元素个数的 整型 MAXNUM
int top;//用于存放顺序栈的栈顶位置,初始化为0或-1 均可 整型 curNum
DataType *element;//用于存放顺序栈数据元素的连续空间的起始地址
};
二、创建空的顺序栈
代码如下(示例):
typedef struct seqStack *PseqStack;
PseqStack createNullStack_seq(int m)
{//此处填写代码,创建一个空的顺序栈,能存放的最大元素个数为 m,栈顶top设置为0
//若m=0,则返回NULL
if (m==0)return NULL;
struct seqStack* slist = (struct seqStack*)malloc(sizeof(struct seqStack));
if(slist!=NULL){
slist -> element = (DataType *) malloc(sizeof(DataType)*m);
if(slist -> element)
{
slist -> MAXNUM = m;
slist -> top = 0;
return slist;
}
}
return NULL;
}
三、判断栈是否为空
int isNullStack_seq(PseqStack L)
{
//判断顺序栈是否为空,若为空,返回值为1,否则返回值为0,若栈不存在,则返回-1
if(L==NULL)
{
return -1;
}else
if(L->top==0)
{
return 1;
}else{
return 0;
}
}
四、判断栈满
int isFullStack_seq(PseqStack L)
{
//判断顺序栈是否已满,若已满,返回值为1,否则返回值为0
if(L->top==L->MAXNUM)
{
return 1;
}else{
return 0;
}
}
五、入栈
int push_seq(PseqStack L ,DataType x)
{//在顺序栈中插入数据元素x,若插入不成功,返回0;插入成功返回值为1
if(isFullStack_seq(L)||L==NULL)
{
return 0;
}else{
L->element[L->top]=x;
L->top=L->top+1;
return 1;
}
}
六、弹栈
DataType pop_seq(PseqStack L)
{//弹栈并返回删除元素,若栈为空,则返回-1
int p;
if(L->top == 0)
{
return -1;
}else{
p=L->element[L->top-1];
L->top=L->top-1;
return p;
}
}
七、取栈顶
DataType top_seq(PseqStack L)
{// 取栈顶元素返回,若栈为空,则返回-1
if(L->top ==0)
{
return -1;
}else{
return L->element[L->top];
}
}
八、销毁顺序栈
int destroystack_seq(PseqStack L)
{
//返回值为销毁的栈中现有数据元素的个数,若待销毁的线性表不存在,则返回0
int m;
if(L == NULL)
{
return 0;
}else{
m=L->top;
free(L->element);
L->element=NULL;
L->top=NULL;
L->MAXNUM=0;
return m;
}
}
九、实现数值转换
//使用已实现的栈操作,实现数制转换
void print(PseqStack L)
{
//逐个弹出栈L中的数据元素并输出,输出数据间不需要任何间隔符号
int x;
for(int i=0;i < L->MAXNUM;i++)
{
x=pop_seq(L);
printf("%d",x);
}
}
void convert(int data,int k)
{
struct seqStack* slist=createNullStack_seq(9);//调用创建函数
int i,x;
char a;
while(data>0) //开始进制转换
{
push_seq(slist,data%k);
data/=k;
}
while(slist->top!=0)
{
x=pop_seq(slist);
if(x!=-1)
{
if(x>9) printf("%c",x+55);//实现大于9的数字转换为大写字母
else
printf("%d",x);
}
}
}
调用创建空顺序栈函数时,用的参数是最大可容纳的数量,但是不太确定,由此取了9的空间
在创建空栈时要给element分配空间