顺序栈进制转换
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }