2 十进制转二进制(顺序栈设计和应用)

设计一个顺序栈,并利用该顺序栈将给定的十进制整整数转换为二进制并输出。

函数接口定义:

#define MaxSize 100    /* 栈最大容量 */
int top;        /* 栈顶指针 */
int mystack[MaxSize];    /* 顺序栈 */

/*判栈是否为空,空返回true,非空返回false */
bool isEmpty();

/* 元素x入栈 */
void Push(int x);

/* 取栈顶元素 */
int getTop();

/* 删除栈顶元素 */
void Pop();
其中 MaxSize 和 top 分别为栈的最大容量和栈顶指针。数组mystack 用来模拟顺序栈。请实现给出的isEmpty、Push、getTop和Pop这四个函数。

## 裁判测试程序样例:
#include <bits/stdc++.h>
using namespace std;

#define MaxSize 100        /* 栈最大容量 */
int top;                /* 栈顶指针 */
int mystack[MaxSize];    /* 顺序栈 */

/*判栈是否为空,空返回true,非空返回false */
bool isEmpty();

/* 元素x入栈 */
void Push(int x);

/* 取栈顶元素 */
int getTop();

/* 删除栈顶元素 */
void Pop();

/* 十进制正整数转换为二进制 */
void dec2bin(int x) {
    top = -1;            /* 初始化栈顶指针 */
    while (x) {
        Push(x % 2);
        x >>= 1;
    }
    while (!isEmpty()) {
        int t = getTop();
        Pop();
        printf("%d", t);
    }
    printf("\n");
}

int main(int argc, char const *argv[])
{
    int n;
    while (scanf("%d", &n) != EOF) {
        dec2bin(n);
    }
    return 0;
}

/* 请在这里填写答案 */
输入样例:
10
输出样例:
1010
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

解题思路

本题较为简单,核心部分题目已经给出了,只需要编写入栈,取栈顶等操作即可,参考教材《数据结构》严蔚敏第二版。

代码实现


/*判栈是否为空,空返回true,非空返回false */
bool isEmpty()
{
	if(top==-1)
		return true;
	else
		return false;
}

/* 元素x入栈 */
void Push(int x)
{
	// 判栈满
	if(top>=MaxSize-1)
		return;
	else
	{
		top++;
		mystack[top] = x;
		return;
	}

}

/* 取栈顶元素 */
int getTop()
{
	if(top==-1)
		return 0;
	else
	{
		return mystack[top];
	}
}

/* 删除栈顶元素 */
void Pop()
{
	if(top==-1)
		return;
	else
	{
		top--;
		return;
	}
}
posted @ 2022-12-02 22:39  蠢蛋快跑  阅读(170)  评论(0)    收藏  举报