#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
#define SElemType int
#define OK 1
typedef struct{
SElemType *base;//在栈构造之前和销毁之后,base的值为null
SElemType *top;//栈顶指针
int stacksize;//当前已分配的存储空间,以元素为单位
}SqStack;
//构造一个空栈
void InitStack(SqStack &S){
S.base=(SElemType *)malloc (STACK_INIT_SIZE *sizeof(SElemType));
if(!S.base)
exit(0);//存储分配失败
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
}
//插入元素e为新的栈顶元素
int Push(SqStack &S,SElemType e){
if((S.top-S.base)>=S.stacksize){
//栈满,追加存储空间
S.base=(SElemType *) realloc (S.base, (S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)
exit(0);//存储分配失败
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}
//若栈不空,则删除栈顶元素,用e返回其值
int Pop(SqStack &S,SElemType &e){
if(S.top==S.base)
return -1;
e=*(--S.top);
return OK;
}
//清空栈
/*int ClearStack(SqStack &S){
if(S.top>=0)
--S.top;
}*/
//判断栈是否为空
int StackEmpty(SqStack &S){
if (S.top == S.base){
return 1;
}
return 0;
}
//对于任意一个非负十进制整数,打印输出与其等值的八进制数
void conversion(){
SqStack S;
InitStack(S);
printf("请输入你想要转换的10进制数:");
SElemType N=0;
scanf("%d",&N);
SElemType e=N;
while(N){
Push(S,N%8);
N=N/8;
}
printf("%d的八进制数是",e);
while(!StackEmpty(S)){
SElemType e=0;
Pop(S,e);
printf("%d",e);
}
}
void main(){
/*SqStack S;
InitStack(S);
if(StackEmpty(S))
printf("S栈为空\n");
else
printf("S栈不为空\n");
printf("请输入一个数字:");
SElemType e=0;
scanf("%d",&e);
Push(S,e);
//printf("栈顶元素为%d",e);
Push(S,1);
Push(S,2);
Push(S,3);
if(StackEmpty(S))
printf("S栈为空\n");
else
printf("S栈不为空\n");
printf("输出栈S:\n");
while(!StackEmpty(S)){
SElemType e=0;
Pop(S,e);
printf("%d ",e);
}*/
conversion();
}
顺序栈的实现
最新推荐文章于 2022-10-30 20:50:09 发布