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

该程序定义了一个顺序栈结构并实现了初始化、入栈、出栈、栈满判断、栈空判断、清空栈、显示栈中元素及十进制到二进制转换等功能。用户可以选择进行相应操作,例如输入整数进行入栈,或者将十进制数转换成二进制输出。
摘要由CSDN通过智能技术生成

定义一个顺序栈,并完成实现以下操作(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  输入错误!  请重新输入! ");
	}
}
}

顺序栈是一种栈的存储结构,它是用一段连续的存储单元依次存储栈中的元素,栈顶指针指向栈顶元素。顺序栈可以用数组来实现十进制转二进制是指将一个十进制数转换为二进制数。顺序栈可以用来实现十进制转二进制的功能。具体实现方法如下: 1. 定义一个顺序栈,用于存储二进制数。 2. 输入一个十进制数,将其不断除以2,将余数压入栈中,直到商为0。 3. 依次出栈,输出栈中的元素,即为该十进制数的二进制表示。 以下是代码实现: ``` #include <stdio.h> #include <stdlib.h> #define MAXSIZE 20 //静态顺序栈存储的最大空间 typedef struct { int data[MAXSIZE];//静态顺序栈可用的最大容量 int top;//栈顶 }SqStack; void InitStack(SqStack &S)//栈的初始化 { S.top = -1;//静态顺序栈中,使S.top=-1便是对栈的初始化 } int Push(SqStack &S,int e)//进栈 { if(S.top==MAXSIZE-1)//判断栈是否为满 { printf("栈满!\n"); return 0; } S.data[++S.top]=e;//S.top自加一,使S.top=0,使输入的e值导入栈中 return 0; } void Pop(SqStack &S)//使栈顶元素出栈,并输出栈顶元素,且栈长减一 { if(S.top == -1)//判断栈是否为空 printf("栈空!\n"); else printf("%d",S.data[S.top--]);//输出栈顶元素 } void Binary(SqStack S)//十进制转二进制函数 { int a, i = 0; printf("请输入十进制数: "); scanf("%d",a);//输入任意的十进制数 while(a)//循环结束条件是a为0 { Push(S,a%2);//余数进栈 a = a/2;//由于是整数形式,不存在除不尽的状况,假设a=1,除2等于0 i++;//记录进栈多少次 ,方便出栈操作 } while(i)//循环终止条件是i为0 { Pop(S);//依次输出栈顶元素 i--; } } int main() { SqStack S; InitStack(S);//创建一个栈,并初始化 Binary(S);//进制转换 return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

加油吧!~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值