2021-10-14

/*函数结果状态代码*/#define  TRUE    1#define  FALSE   0#define  OK        1#define  ERROR  0#define  INFEASIBLE  -1#define  OVERFLOW   -2#define  STACK_INIT_SIZE  100   //存储空间的初始分配量#define  STACKINCREMENT  10     //存储空间的分配增量typedef   int   Status; typedef  int  SElemType;		//十进制转八进制,栈用于存整数typedef struct {  	SElemType *base;		//栈构造之前和销毁之后,base的值为NULL 	SElemType *top;			//栈顶指针	int stacksize; 			//当前已分配的存储空间,以元素为单位}SqStack; 					//P46页 Status InitStack(SqStack &S)		//构造一个空栈,P47页 {  	S.base =(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));	if(!(S.base))   		return ERROR; 				//存储分配失败	S.top =S.base ;	S.stacksize = STACK_INIT_SIZE;	return OK;}//InitStack Status DestroyStack(SqStack &S)		//销毁栈{  	if(S.base)		free(S.base);	S.base=NULL;	return OK;}//InitStack Status GetTop(SqStack S,SElemType &e)	//若栈非空,用e返回栈顶元素,P47页 {	if (S.top == S.base ) return ERROR;	e=*(S.top -1);	return OK;}//GetTopStatus Pop(SqStack &S,SElemType &e)		//若栈非空,出栈,用e返回,P47页{		if (S.top ==S.base )	return ERROR;	S.top --;	e=*S.top ;	return OK;        }//PopStatus Push(SqStack &S,SElemType e)		//e入栈,P47页 {	SElemType * newbase,*p,*q;	if (S.top -S.base >=S.stacksize )	//栈满	{		S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));		if(!S.base)			exit(OVERFLOW);				//存储分配失败 			return ERROR;			for(p=newbase,q=S.base;q<S.top;p++,q++)			*p=*q;		S.base=newbase;		S.top=S.base+S.stacksize ;		S.stacksize=S.stacksize+STACKINCREMENT;	}	*S.top ++ = e;	return OK;}//PushStatus StackEmpty(SqStack S)	//若栈空,返回TRUE,否则返回FALSE{	if (S.top ==S.base )		return TRUE;	else		return FALSE;}//StackEmptyvoid conversion()	//十进制转八进制{	SqStack S;	SElemType e;	int N;	InitStack(S);		//初始化空栈	printf("please input a decimal number: ");	scanf("%d",&N);				//从键盘接收一个十进制的数	while (N)	{		Push(S,N%8);		N=N/8;	}	while (!StackEmpty(S))	{		Pop(S,e);		printf("%d",e);	}	printf("\n");	DestroyStack(S); 		//销毁栈}//conversionint main()	{	conversion();		//十进制转八进制	return 0;}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值