栈的使用和简单进制转换的应用

来源:互联网 发布:深蓝射频效果知乎 编辑:程序博客网 时间:2024/05/16 09:30


栈头文件

/* * ADTStack.h * *  Created on: 2013-5-26 *      Author: inner */#ifndef ADTSTACK_H_#define ADTSTACK_H_#define STACK_INT_SIZE 100#define STACKINCREMENT 10typedef int sElemType;typedef struct{sElemType *top;sElemType *base;int stacksize;}SqStack;//初始化 void InitStack(SqStack *stack); //销毁栈 void DestroyStack(SqStack *stack); //入栈 void Push(SqStack *stack,sElemType elem); //出栈 int pop(SqStack *stack); //栈顶元素 int getTop(SqStack *stack); //判断栈是否为空 int IsEmpty(SqStack *stack);#endif /* ADTSTACK_H_ */


栈源文件

/* * StackMake.c * *  Created on: 2013-5-26 *      Author: inner */#include <stdio.h>#include <stdlib.h>#include "ADTStack.h" void InitStack(SqStack *stack){//分配内存空间stack->top = (sElemType*)malloc(STACK_INT_SIZE*sizeof(sElemType));if(!stack->top)exit(1);stack->base = stack->top;stack->stacksize = STACK_INT_SIZE;printf("初始化成功\n"); } void Push(SqStack *stack,sElemType elem){ if(stack->top-stack->base>=stack->stacksize){ stack->base =(sElemType*)realloc(stack->base,(STACKINCREMENT+STACK_INT_SIZE)*sizeof(sElemType)); } *stack->top = elem; ++stack->top; printf("入栈为%d\n",elem); printf("栈大小%d\n",stack->top-stack->base); }  int pop(SqStack *stack){  //检查栈是否为空  if(stack->top-stack->base == 0){  printf("栈为空");  exit(0);  }  int kk;  kk = *--stack->top;      printf("出站为%d\n",kk);      printf("栈大小%d\n",stack->top-stack->base);  return kk;  }  int getTop(SqStack *stack){  if(IsEmpty(stack))  exit(0);  int kk = *(--stack->top);  printf("栈顶元素为:%d",kk);  return kk;  }  int IsEmpty(SqStack *stack){  if(stack->top-stack->base == 0){  printf("栈已经为空");  return 1;  }  return 0;  }


栈的进制转换执行文件


#include <stdio.h>#include <stdlib.h>#include "ADTStack.h"void conversion(int,int);int main(void) {int a, b;printf("输入十进制数\n");scanf("%d",&a);printf("输入要转换进制\n");scanf("%d",&b);conversion(a,b);return EXIT_SUCCESS;}void conversion(int a,int b){SqStack S;InitStack(&S);while(a){Push(&S,a%b);a=a/b;}while(!IsEmpty(&S)){printf("%d",pop(&S));}}


栈的进制实例效果

输入十进制数
88888
输入要转换进制
7
初始化成功
入栈为2
栈大小1
入栈为0
栈大小2
入栈为1
栈大小3
入栈为0
栈大小4
入栈为2
栈大小5
入栈为5
栈大小6
520102栈已经为空

栈的接口测试

int main(void) {    SqStack stack;    InitStack(&stack);    Push(&stack,688);    Push(&stack,66555);    pop(&stack);    getTop(&stack);    return EXIT_SUCCESS;}


栈的接口的实例效果

初始化成功
入栈为688
栈大小1
入栈为66555
栈大小2
出站为66555
栈大小1
栈顶元素为:688

简单的栈就到这里了。。。。

原创粉丝点击