这个函数里面怎么填
////stack_.cpp
//Stack
//
//Created by ljpc on 2018/4/17.
//Copyright © 2018年 ljpc. All rights reserved.
//
#include "stack_.h"
// 栈操作实现文件
//////////////////////////////////////////////////////////////
Stack* Stack_Create(int maxlen)
// 创建栈
{
Stack* stk = (Stack*)malloc(sizeof(Stack));
stk->data = (T*)malloc(sizeof(T)*maxlen);
stk->max = maxlen;
stk->top = -1;
return stk;
}
void Stack_Free(Stack* stk)
// 释放栈
{
free(stk->data);
free(stk);
}
void Stack_MakeEmpty(Stack* stk)
// 置为空栈
{
stk->top = -1;
}
bool Stack_IsEmpty(Stack* stk)
// 判断栈是否空
{
return -1 == stk->top;
}
bool Stack_IsFull(Stack* stk)
// 判断栈是否满
{
return stk->top == stk->max-1;
}
T Stack_Top(Stack* stk)
// 获取当前栈顶元素
{
return stk->data;
}
T Stack_Push(Stack* stk, T e)
// 将元素e压入栈顶
// 返回栈顶点元素
{
if(Stack_IsFull(stk)) {
printf("Stack_IsFull(): stack full error when push element to the stack!\n");
Stack_Free(stk);
exit(0);
}
else{
stk->top += 1;
stk->data = e;
return Stack_Top(stk);
}
}
T Stack_Pop(Stack* stk)
// 将栈顶元素出栈
// 返回栈顶元素
{
if(Stack_IsEmpty(stk)) {
printf("Stack_IsEmpty(): stack empty error when pop element of the stack top!\n");
Stack_Free(stk);
exit(0);
}
else{
T topE = Stack_Top(stk);
stk->top -= 1;
return topE;
}
}
void Stack_Print(Stack* stk)
// 打印栈顶到栈低的元素
{
if (Stack_IsEmpty(stk)) {
printf("The stack is empty.\n");
return;
}
//printf("The stack contains: ");
for (int i=stk->top; i>=0; i--) {
printf("%d", stk->data);
}
printf("\n");
}
void Decimal_Conversion_Octal(T e)
//利用stack栈实现整数的十进制转八进制
//输入参数:十进制整数 e
//打印e的八进制结果,末尾换行
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
/********** End **********/
}
运用的是C语言 本帖最后由 jackz007 于 2024-4-15 12:37 编辑
void Decimal_Conversion_Octal(T e)
//利用stack栈实现整数的十进制转八进制
//输入参数:十进制整数 e
//打印e的八进制结果,末尾换行
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
int maxlen = 100 ;
Stack * stk ;
stk = Stack_Create(maxlen) ;
for(; e > 0 ; e /= 8) Stack_Push(stk , e % 8) ;
Stack_Print(stk) ;
free(stk -> data) ;
/********** End **********/
} void Decimal_Conversion_Octal(T e)
// 利用栈实现整数的十进制转八进制
// 输入参数:十进制整数 e
// 打印 e 的八进制结果,末尾换行
{
// 创建一个足够大的栈来存储八进制数字
// 假设栈的大小为 32,对于一般情况已经足够
Stack* stk = Stack_Create(32);
// 当 e 为 0 的特殊处理
if (e == 0) {
printf("0\n");
Stack_Free(stk);
return;
}
// 处理负数的情况
bool isNegative = false;
if (e < 0) {
isNegative = true;
e = -e;// 将 e 转为正数处理
}
// 将十进制数转换为八进制,通过将余数压入栈中
while (e > 0) {
int remainder = e % 8;// 求余数
Stack_Push(stk, remainder);// 将余数压栈
e /= 8;// 除以 8 准备下一次迭代
}
// 如果原始数字是负数,输出负号
if (isNegative) {
printf("-");
}
// 弹出栈中的元素并打印,得到正确顺序的八进制数字
while (!Stack_IsEmpty(stk)) {
printf("%d", Stack_Pop(stk));
}
printf("\n");
// 释放栈资源,避免内存泄漏
Stack_Free(stk);
}
页:
[1]