顺序栈进制转换

  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

原文地址:https://www.cnblogs.com/jeseesmith/p/13797046.html