• 顺序栈进制转换


      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 typedef int DataType;
      4 struct seqStack
      5 {//有3个数据成员
      6     int MAXNUM;//用于记录顺序栈中能存放的最大元素个数的 整型 MAXNUM
      7     int top;//用于存放顺序栈的栈顶位置,初始化为0或-1 均可  整型  curNum
      8     DataType *element;//用于存放顺序栈数据元素的连续空间的起始地址
      9 };
     10 typedef struct seqStack *PseqStack;
     11 
     12 
     13 PseqStack createNullStack_seq(int m);
     14 void convert(int data , int k);
     15 int isNullStack_seq(PseqStack L);
     16 int isFullStack_seq(PseqStack L);
     17 int push_seq(PseqStack L ,DataType x);
     18 
     19 int main() {
     20     int m ,x;
     21     scanf("%d%d",&m,&x);
     22     convert(m,x);
     23     return 0;
     24 }
     25 
     26 PseqStack createNullStack_seq(int m)
     27 {//此处填写代码,创建一个空的顺序栈,能存放的最大元素个数为 m,栈顶top设置为0
     28     //若m=0,则返回NULL
     29     if(m==0){
     30         return 0;
     31     }
     32     PseqStack stack = (PseqStack)malloc(sizeof(struct seqStack));
     33     if(stack!=NULL){
     34         stack->element = (DataType*)malloc(sizeof(DataType)*m);
     35         stack->MAXNUM=m;
     36         stack->top=0;
     37     }
     38     return stack;
     39 }
     40 
     41 //第二关
     42 int isNullStack_seq(PseqStack L)
     43 {
     44     //判断顺序栈是否为空,若为空,返回值为1,否则返回值为0,若栈不存在,则返回-1
     45     if(L==NULL){
     46         return -1;
     47 
     48     }
     49     if(L->top==0){
     50         return 1;
     51     }
     52     return 0;
     53 }
     54 
     55 
     56 //第三关
     57 int isFullStack_seq(PseqStack L)
     58 {
     59     //判断顺序栈是否已满,若已满,返回值为1,否则返回值为0
     60     if(L->top==L->MAXNUM){
     61         return 1;
     62     }
     63     return 0;
     64 }
     65 
     66 
     67 //第四关
     68 int push_seq(PseqStack L ,DataType x)
     69 {//在顺序栈中插入数据元素x,若插入不成功,返回0;插入成功返回值为1
     70     if(L==NULL||isFullStack_seq(L)){
     71         return 0;
     72     }
     73     L->top++;
     74     L->element[L->top]=x;
     75     return 1;
     76 
     77 }
     78 
     79 
     80 
     81 //第五关
     82 DataType pop_seq(PseqStack L)
     83 {//弹栈并返回删除元素,若栈为空,则返回-1
     84     if(L==NULL){
     85         return;
     86     }
     87     if(L->top==0){
     88         return -1;
     89     }else{
     90         int ans=L->element[L->top];
     91         L->element[L->top]=0;
     92         L->top--;
     93         return ans;
     94     }
     95 
     96 }
     97 
     98 //第六关
     99 DataType top_seq(PseqStack L)
    100 {// 取栈顶元素返回,若栈为空,则返回-1
    101     if(L->top==0&&L!=NULL){
    102         return -1;
    103     }
    104     if(L!=NULL){
    105         return L->element[L->top];
    106     }
    107 }
    108 
    109 //销毁顺序栈,释放栈所占存储空间
    110 int destroystack_seq(PseqStack L)
    111 {
    112     //返回值为销毁的栈中现有数据元素的个数,若待销毁的线性表不存在,则返回0
    113     if(L==NULL){
    114         return 0;
    115     }
    116     int cnt=0;
    117     while(L->top!=0){
    118         cnt++;
    119         L->top--;
    120     }
    121 }
    122 void convert(int data , int k)
    123 {
    124 //利用栈实现将data转换为k进制,k可能是2,8,16. 在本函数内实现转换并调用print函数输出转换后的结果
    125 //十六进制时输出 A ,B ,C, D,E,F 使用大写字母
    126     PseqStack L= createNullStack_seq(1000);
    127     if(k==2){
    128         while(data){
    129             push_seq(L,data%2);
    130             data/=2;
    131         }
    132         while(L->top!=0){
    133             printf("%d",pop_seq(L));
    134         }
    135 
    136     }
    137     if(k==8){
    138         while(data){
    139             push_seq(L,data%8);
    140             data/=8;
    141         }
    142         while(L->top!=0){
    143             printf("%d",pop_seq(L));
    144         }
    145 
    146     }
    147     if(k==16){
    148         char Hex[20]={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
    149         while(data){
    150             push_seq(L,data%16);
    151             data/=16;
    152         }
    153         while(L->top!=0){
    154             printf("%c", Hex[pop_seq(L)]);
    155 
    156         }
    157 
    158     }
    159 }
    View Code

  • 相关阅读:
    在Linux中运行Nancy应用程序
    医疗行业信息化学习资源
    Windows Live Writer 的昨日荣光
    读书笔记:李叔同,说佛(上),为人十训
    使用Expression Tree构建动态LINQ查询
    读书笔记:季羡林关于如何做研究学问的心得
    XML序列化的时候如何支持Namespace
    Kafka Consumer
    Linux环境安装Golang
    Linux 下 zip 文件解压乱码如何解决
  • 原文地址:https://www.cnblogs.com/jeseesmith/p/13797046.html
Copyright © 2020-2023  润新知