数据结构c语言-顺序栈(实现进制转换)

数据结构c语言-顺序栈(实现进制转换)

文章目录

  • 数据结构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分配空间

你可能感兴趣的:(数据结构,c语言)