栈的基本操作——2,8,16进制的入栈(头文件)

#define stack_init_size 100
#define stackincrement  10
typedef int selemtype;
typedef int status;
const status error=0;
const status ok=1;
const status overflow=-2;

typedef struct{
	selemtype *top;
	selemtype *base;
	int stacksize;
}sqstack;

status initstack(sqstack &s)
{
   //TODO1-------
   //栈的初始化,构造一个空栈;	
	s.base=(selemtype*)malloc(stack_init_size*sizeof(selemtype));
	if(!s.base)exit(overflow);
	s.stacksize=stack_init_size;
	s.top=s.base;
    return ok;
}

status stackempty(sqstack s)
{
	//TODO2------
	//判断栈是否为空,空返回ok,否则返回error;
	if(s.base==s.top)
        return ok; 
	else 
		return error;//根据判断结果修改。
}

status gettop(sqstack s,selemtype &e)
{
	//TODO3-------
	//取栈顶元素
	if(s.top==s.base)
		return error;
	e=*(s.top-1);
     return ok;
}

status push(sqstack &s,selemtype e)
{
	//TODO4-------
	//判断栈是否满
	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;
	}
    //入栈,讨论不同的情况(2,8,16进制)
    switch(e){
	   case 10:
       e='A';
	   break;
       case 11:
       e='B';
	   break;
	   case 12:
       e='C';
	   break;
	   case 13:
       e='D';
	   break;
	   case 14:
       e='E';
	   break;
	   case 15:
       e='F';
	   break;
	}
	*s.top++=e;
    return ok;
}

status pop(sqstack &s,selemtype &e)
{
    //TODO5------
	//出栈操作
    if(s.base==s.top)
		return error;
	e=*--s.top;
    return ok;
}

status destroystack(sqstack &s)
{    free(s.base);
     return ok;

}

status clearstack(sqstack &s)
{   s.top=s.base;
    return ok;

}

int stacklength(sqstack s)
{    return s.top-s.base;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,下面是十进制转八进制的实现过程的 C++ 代码,包含头文件和实现文件: 头文件 Stack.h: ```cpp #ifndef STACK_H #define STACK_H #define MAX_SIZE 100 class Stack { private: int top; int data[MAX_SIZE]; public: Stack(); void push(int num); int pop(); bool is_empty(); }; #endif ``` 的实现文件 Stack.cpp: ```cpp #include "Stack.h" #include <iostream> #include <cstdlib> using namespace std; Stack::Stack() { top = -1; } void Stack::push(int num) { if (top == MAX_SIZE - 1) { cout << "Stack is full" << endl; exit(1); } data[++top] = num; } int Stack::pop() { if (top == -1) { cout << "Stack is empty" << endl; exit(1); } return data[top--]; } bool Stack::is_empty() { return top == -1; } ``` 十进制转八进制的实现文件 DecimalToOctal.cpp: ```cpp #include "Stack.h" #include <iostream> #include <cstdlib> #include <cstring> using namespace std; char *decimal_to_octal(int decimal_num) { Stack s; while (decimal_num > 0) { int remainder = decimal_num % 8; s.push(remainder); decimal_num /= 8; } char *octal_num = new char[s.pop() + 2]; int index = 0; while (!s.is_empty()) { octal_num[index++] = s.pop() + '0'; } octal_num[index] = '\0'; return octal_num; } ``` 主函文件 main.cpp: ```cpp #include "Stack.h" #include <iostream> #include <cstdlib> #include <cstring> using namespace std; extern char *decimal_to_octal(int decimal_num); int main() { int decimal_num = 123; char *octal_num = decimal_to_octal(decimal_num); cout << decimal_num << " in decimal is " << octal_num << " in octal" << endl; delete[] octal_num; return 0; } ``` 你可以将这些文件放在同一个目录下,使用编译器将这些文件编译为可执行文件,运行可执行文件即可得到结果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beyond_LH

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值