📄 4.2.c
字号:
//库函数和常量定义:
#include <malloc.h>
#include <stdio.h>
#include <iostream.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define SINIT_SIZE 100 //存储空间初始分配量
#define conver 8
#define STACKINCREMENT 10 //存储空间分配增量
typedef int Status;
typedef char SElemType;
//(1)栈顺序存储结构的定义:
typedef struct{
SElemType *base; //在栈构造之前和销毁时,base=NULL.
SElemType *top; //栈顶指针
int stacksize; //当前已分配的存储空间,以元素为单位。
}SqStack;
//(2)初始化栈算法
Status InitStack(SqStack *S) //构造一个空栈S
{
S->base=(SElemType *)malloc(SINIT_SIZE*sizeof(SElemType));
if (!S->base) return (ERROR);
S->top=S->base;
//空栈。
S->stacksize=SINIT_SIZE;
return OK;
}
//(3)获得栈顶元素算法
Status GetTop(SqStack S,SElemType *e)
//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
{
if (S.top==S.base) return ERROR;
*e=*(S.top-1);
return OK;
}
//(4)进栈算法
Status Push(SqStack *S,SElemType e) //插入元素e为新的栈顶元素
{
if (S->top-S->base>=S->stacksize)
{ //栈满,追加存储空间
S->base=(SElemType *)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType));
if (!S->base) return(ERROR); //存储分配失败
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT;
}
*S->top++=e; //*(S->top)=e;S->top++;
return OK;
}
//(5)出栈算法
Status Pop(SqStack *S,SElemType *e)
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
{
if (S->top==S->base) return ERROR; //判栈空
*e=*--S->top;
return OK;
}
//(6)遍历栈算法
Status print(SqStack S) //遍历栈
{
SElemType *p;
p=S.base++;
if (S.top==p)
{
printf("sorry!栈为空!\n");
return ERROR;
}
printf("栈中的元素为:\n");
for (;p<S.top;p++)
printf("%c\n",*(p));
return OK;
}
//(7)销毁栈算法
Status DestroyStack(SqStack *S) //销毁栈S,S不再存在
{
SElemType *q;SqStack *p;
q=S->base;
free(q);
p=S;
free(p);
printf("栈已销毁,不存在!\n");
return OK;
}
//(8)清空栈算法
Status ClearStack(SqStack *S)
{
if (!S->base) return (ERROR);
S->top=S->base; //空栈
//栈的容量大小未变
printf("栈已清空!");
return OK;
}
//(9)判栈空算法
Status StackEempty(SqStack S) //判空
{
if (S.top==S.base) return TRUE;
else return FALSE;
}
//(10)求栈长
int StackLength(SqStack S)
{
return (S.top-S.base);
}
void conversion()
//对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数;
{
SqStack s1;int N,n; SElemType e;
InitStack(&s1);
printf("请输入一个十进制数:");
scanf("%d",&N);
n=N;
while (n){
Push(&s1,n%conver);
n/=conver;
}
printf("其对应的八进制数为:");
while (!StackEempty(s1))
{
Pop(&s1,&e);
printf("%d",e);
}
printf("H\n");
}
void main()
{
printf("\t\t进制转换:10->%d\n\n\n",conver);
conversion();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -