顺序栈基本操作+十进制转二进制

定义一个顺序栈,并完成实现以下操作(1)初始化(2)入栈(3)出栈(4)判断栈满(5)判断栈空(6)清空栈(7)显示栈中各元素(8)十进制到二进制的转换

#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int Status;
typedef int QElemType;
typedef int SElemType;
#include<stdio.h>
#include<stdlib.h>
#define  MAXSIZE  100
#include<iostream>
using namespace std;
typedef struct
{
		SElemType   *base;  //栈底指针
		SElemType   *top;  //栈顶指针
		int stackSize; //栈可用的最大容量
}SqStack;

Status InitStack( SqStack &S )
{
	S.base =new SElemType[MAXSIZE];//分配空间
	if( !S.base ) exit(OVERFLOW); //分配空间失败
	S.top = S.base;  //top初始为base,空栈
	S.stackSize = MAXSIZE; //设置栈的容量
	return OK;
}

bool StackFull( SqStack S )
{
	if(S.top-S.base==S.stackSize) return true;
 //栈空,返回真
    else 
      return false;
}

bool StackEmpty( SqStack S )
{
	if(S.top == S.base) return true;
 //栈空,返回真
else return false;
}

int StackLength( SqStack S )
{
	return S.top-S.base; //栈中元素的个数,即为顺序栈的长度
}

Status ClearStack( SqStack S )
{
	if( S.base )
		S.top = S.base;
//将top指向栈底,栈为空
	return OK;
}

Status Push( SqStack &S, SElemType e)  
{
	if( S.top-S.base==S.stackSize )   // 栈满
        return ERROR; 	
		*S.top++=e;	
	 // 元素e压入栈顶,栈顶指针加1
   
	return OK;
}

Status Pop( SqStack &S, SElemType &e)  
{
	if( S.top == S.base )   // 栈空
        return ERROR;
	e= *--S.top;  //栈顶指针减1,将栈顶元素赋给e
	return OK;
}

Status GetTop( SqStack S, SElemType &e)  
{

	if( S.top == S.base )	
		return ERROR; 	// 栈空
	e=*(S.top-1);	
	return e; 
}


void DecimalToBinary(int N){
	SqStack S;
	InitStack(S);
	while(N){
    Push(S,N%2);
	N=N/2;	
	}	
	while(!StackEmpty(S)){
		Pop(S,N);
		printf("%d",N);
	}
	printf("\n");
}
void StackPrint(SqStack &S){
	 int *p,*t;
	 p=S.top;
	 t=S.base;	 
	 	printf("栈中元素:");
	 for(int i=0;i<StackLength(S);i++){
		printf("%5d", *t);
		t=t+1;
	 }	
	 
}


void main(){
	int m,i,b,n,k,j=1;
	SqStack S;
//	printf("请输入一个十进制整数:");
//	printf("该整数的二进制数是:\n");
//	scanf("%d",&m);
//	bajinzhi(m);
while(j)
  {
    printf("\n");
    printf("\n\t\t             顺序栈实现整数表的基本操作                 ");
    printf("\n\t\t***************************************************** ");
    printf("\n\t\t*         1------初始化                              *");
    printf("\n\t\t*         2------入栈                                *");
    printf("\n\t\t*         3------出栈                                *");
	printf("\n\t\t*         4------判断栈满                            *");
    printf("\n\t\t*         5------判断栈空                            *");
    printf("\n\t\t*         6------清空栈                              *");
    printf("\n\t\t*         7------显示栈中各元素                      *");
	printf("\n\t\t*         8------十进制到二进制的转换                *");
    printf("\n\t\t*         0------返 回                               *");
    printf("\n\t\t******************************************************");
    printf("\n\t\t  请选择菜单号(0--9):   ");

    scanf("%d",&m);
	switch(m)
	{
	case 1:
		if(InitStack(S))
			printf("初始化成功!");
		else
			printf("初始化失败!");
			break; 
	case 2:
		printf("请输入要入栈几个整数:");
		scanf("%d",&n);
		
		for( k=0;k<n;k++){
		printf("请输入要入栈的第%d个整数:",k+1);
		scanf("%d",&i);
		if(Push(S,i) )
			printf("已入栈成功!\n");
		else
			printf("未入栈成功!\n");
		}
       
			break; 
	case 3:
		if(Pop(S,i)  )
			printf("栈顶已出栈成功!");
		else
			printf("未出栈成功!");
			break; 
	case 5:
		if(StackEmpty(S))
			printf("空栈!");
		else
		    printf("不是空栈!");
			break; 
	case 4:
		if( StackFull(S) )
			printf("栈满!");
		else
			printf("栈未满!");
			break; 
	case 6:
		ClearStack(S );
		printf("栈已清空!");
	     	break;
	case 7:
		if(S.base==S.top)
    printf("栈中无元素!");
	else
		StackPrint(S);
        	break;
	case 8:
	    printf("请输入一个十进制整数");
		scanf("%d",&b);
		printf("输出所对应的二进制整数是:");
		DecimalToBinary(b);
			break; 		
	case 0:
			j=0;   
			break; 
    default: 
         printf("\n\t\t  输入错误!  请重新输入! ");
	}
}
}

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

加油吧!~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值