栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/311736.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号