数据结构(C语言版)

用栈实现数字的进制转换(10转8)
栈:限定只能在表尾进行插入或者删除操作的线性表
特点:先进后出
存储表示方法:顺序栈和链栈(本文用的顺序栈)
代码实现:

<textarea readonly="readonly"name="code"
class="c">
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100//存储空间初始分配量
#define STACKINCREMENT 10//存储空间分配增量
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define TRUE  1
#define FALSE 0
typedef  int SElemType;
typedef  int Status;

typedef struct {
 SElemType * base;
 SElemType * top;//栈顶指针
 int stacksize;//当前已分配的的存储空间(以元素为单位)
} SqStack;
//构造一个空栈S
Status  InitStack(SqStack *s)
{
 s->base = (SElemType *)malloc(STACK_INIT_SIZE  * sizeof(SElemType));
 if (!s->base)exit(OVERFLOW);
 s->top = s->base;
 s->stacksize = STACK_INIT_SIZE;
 return OK;
}
//插入元素e为新的栈顶元素
void push(SqStack *s, SElemType e)
{
if (s->top - s->base >= s->stacksize)
	{
 s->base = (SElemType *)realloc(s->base, (s->stacksize + STACKINCREMENT)*sizeof(SElemType));
  if (!s->base)exit(OVERFLOW);
   s->top = s->base + s->stacksize;
  s->stacksize += STACKINCREMENT;
	}
*(s->top) = e;
 s->top++;
 }
 //若栈不空删除栈顶元素,用e返回该值
 Status pop(SqStack *s, SElemType *e)
 {
 if (s->top == s->base)
  return ERROR;
 *e = *--(s->top);
 return OK;
}
//判断栈是否为空
int StackEmpty(SqStack s)
{
 if (s.top == s.base)return TRUE;
 else  return FALSE;
}
//进行转换
void conversion()
{
int N;
 SElemType e;
 SqStack s1;
 InitStack(&s1);
 printf("请输入一个10进制数:");
 scanf_s("%d", &N);
  while (N != 0)
 	 {
   push(&s1, N % 8);
  N = N / 8;
	}
	printf("转换后的8进制数为:");
 while (!StackEmpty(s1))
 	{
 pop(&s1, &e);
 printf("%d", e);
	}
printf("\n");
}
//主函数
void main()
{
 conversion();
 system("pause");
}

</textarea>

以上仅是个人的想法,如有错误希望小伙伴们不吝赐教。嘻嘻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值