欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

LIFO栈 ADT接口 实现十进制转其他进制

程序员文章站 2022-06-26 20:47:45
LIFO 接口 Stack.h LIFO 接口 链表实现 LinkedStack.c LIFO 接口 数组实现 SeqStack.c 进制转换程序 main.c ......

lifo 接口 stack.h

 1 //lifo 链栈初始化
 2 void initstack(stack top){
 3 //lifo 链栈判断栈空
 4  boolean stackkempty(stack top){
 5 //lifo 链栈进栈
 6  void push(stack top, elemtype x){
 7 //lifo 链栈出栈
 8  elemtype pop(stack top){
 9 //lifo 链栈读取栈顶
10  elemtype gettop(stack top){

lifo 接口 链表实现 linkedstack.c

 1 //lifo 链栈初始化
 2 void initstack(stack top){
 3      top = null;
 4 }
 5 
 6 //lifo 链栈判断栈空
 7 boolean stackkempty(stack top){
 8      if(top == null) return true;
 9      else return false;
10 }
11 
12 //lifo 链栈进栈
13 void push(stack top, elemtype x){
14      linkedstack p;
15      p = malloc(sizeof *p);
16      p -> data =x;
17      p -> next = top;
18      top = p;
19 }
20 
21 //lifo 链栈出栈
22 elemtype pop(stack top){
23      linkedstack p;
24      elemtype x;
25      if(top == null){
26         printf("栈下溢错误!\n");
27         exit(1);
28      }
29      p = top;
30      x = p -> data;
31      top = top -> next;
32      free(p);
33      return x;
34 }
35 
36 //lifo 链栈读取栈顶
37 elemtype gettop(stack top){
38      if(top == null){
39         printf("栈下溢错误! \n");
40         exit(1);
41      }
42      return top -> data;
43 }

lifo 接口 数组实现 seqstack.c

 1 //lifo 顺序栈 初始化
 2 void initstack(stack s){
 3      s -> top = -1;
 4 }
 5 
 6 //lifo 顺序栈判断栈空
 7 boolean stackempty(stack s){
 8      if(s -> top == -1) return true;
 9      else return false;
10 }
11 
12 //lifo 顺序栈判断栈满
13 boolean stackfull(stack s){
14      if(s -> top == maxsize-1) return true;
15      else return false;
16 }
17 
18 //lifo 顺序栈进栈
19 void push(stack s, elemtype x){
20      if(s->top == maxsize-1){
21         printf("栈满溢出错误!\n");
22         exit(1);
23      }
24      s -> top++;
25      s -> data[s>top] = x;
26 }
27 
28 //lifo 顺序栈出栈
29 elemtype pop(stack s){
30      if(stackempty(s){
31         printf("栈下溢错误!\n");
32         exit(1);
33      }
34      x = s->data[s->top];
35      s -> top--;
36      return x;
37 }
38 
39 //lifo 顺序栈读取栈顶元素
40 elemtype gettop(stack s){
41      if(stackempty(s){
42         printf("下溢错误!\n");
43         exit(1);
44      }
45      return s -> data[s -> top];
46 }

进制转换程序 main.c

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<stack.h>
 4 
 5 void transform(int m, int n);
 6 
 7 int main(void){
 8 
 9     printf("将十进制数转换为任意进制数实例:\n");
10     transform(1567, 8);
11     transform(1567, 6);
12     transform(1567, 4);
13     transform(1567, 2);
14 }
15 
16 void transform(int m, int n){
17     int k;
18     int mm = m;
19 
20     stack s;
21     initstack(&s);
22     while(m != 0){
23     k = m % n;
24     push(s, k);
25     m /= n;
26     }
27     
28     printf("十进制数%d转换为%d    进制数为:",mm, n);
29     while(! stackempty(&s)){
30     k = pop(s, k);
31     printf("%d", k);
32     }
33     putchar('\n');
34 }