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

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 }

 

posted on 2018-09-30 16:06  MACHINE_001  阅读(285)  评论(0编辑  收藏  举报

导航