分别写函数实现初始化栈、入栈、出栈、判断栈空、判断栈满。例如入栈序列为1 2 3 4 5,出栈则为5 4 3 2 1
发布网友
发布时间:2022-05-07 23:23
我来回答
共3个回答
热心网友
时间:2023-11-20 03:25
1、初始化栈
/*功能:初始化栈
*函数名:InitStack
*返回值:void
*/
void InitStack(stack *p)
{
p->top=-1;
}
2、判断栈为满
/*功能:判断栈为满
*函数名:IsFull
*返回值:为满——真1,非满——假0
*/
BOOL IsFull(stack *p)
{
if(MAXSIZE-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
3、判断栈为空
/*功能:判断栈为空
* 函数名:IsEmpty
*返回值:为空——真1,非空——假0
*/
BOOL IsEmpty(stack *p)
{
if(-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
4、进栈
/*功能:进栈
*函数名:push
*返回值:成功TRUN 失败FALSE
*注:不能为满,否则进栈失败
*/
BOOL push(stack *p,StackType data)//p=&s
{
//判断栈是否为满
if(TRUE==IsFull(p))//为满
{
return FALSE;//返回失败
}
p->buf[++p->top]=data;
return TRUE;//返回成功
}
5、出栈
/*功能:出栈
*函数名:pop
*返回值:出栈成功TRUE 失败FALSE
*/
BOOL pop(stack *p,StackType *pd)
{
//判断是否为空,为空出栈无意义
if(TRUE==IsEmpty(p))
{
return FALSE;//出栈失败
}
*pd=p->buf[p->top--];//优先级->大于--
return TRUE;//出栈成功
}
扩展资料:
主函数:
void main()
{
//定义变量:类型 变量名
//struct st s;
struct st s;//分配空间
//初始化
InitStack(&s);
int num=0;
printf("请输入");
scanf("%d",&num);
//求二进制
while(num!=0)
{
//将余数入栈
if(FALSE==push(&s,num%2))
{
return;//结束
}
num/=2;
}
//将二进制结果取出来
char value=0;
while(FALSE!=pop(&s,&value))
{
printf("%d",value);
}
printf("\n");
}
热心网友
时间:2023-11-20 03:25
1、初始化栈
/*功能:初始化栈
*函数名:InitStack
*返回值:void
*/
void InitStack(stack *p)
{
p->top=-1;
}
2、判断栈为满
/*功能:判断栈为满
*函数名:IsFull
*返回值:为满——真1,非满——假0
*/
BOOL IsFull(stack *p)
{
if(MAXSIZE-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
3、判断栈为空
/*功能:判断栈为空
* 函数名:IsEmpty
*返回值:为空——真1,非空——假0
*/
BOOL IsEmpty(stack *p)
{
if(-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
4、进栈
/*功能:进栈
*函数名:push
*返回值:成功TRUN 失败FALSE
*注:不能为满,否则进栈失败
*/
BOOL push(stack *p,StackType data)//p=&s
{
//判断栈是否为满
if(TRUE==IsFull(p))//为满
{
return FALSE;//返回失败
}
p->buf[++p->top]=data;
return TRUE;//返回成功
}
5、出栈
/*功能:出栈
*函数名:pop
*返回值:出栈成功TRUE 失败FALSE
*/
BOOL pop(stack *p,StackType *pd)
{
//判断是否为空,为空出栈无意义
if(TRUE==IsEmpty(p))
{
return FALSE;//出栈失败
}
*pd=p->buf[p->top--];//优先级->大于--
return TRUE;//出栈成功
}
扩展资料:
主函数:
void main()
{
//定义变量:类型 变量名
//struct st s;
struct st s;//分配空间
//初始化
InitStack(&s);
int num=0;
printf("请输入");
scanf("%d",&num);
//求二进制
while(num!=0)
{
//将余数入栈
if(FALSE==push(&s,num%2))
{
return;//结束
}
num/=2;
}
//将二进制结果取出来
char value=0;
while(FALSE!=pop(&s,&value))
{
printf("%d",value);
}
printf("\n");
}
热心网友
时间:2023-11-20 03:25
1、初始化栈
/*功能:初始化栈
*函数名:InitStack
*返回值:void
*/
void InitStack(stack *p)
{
p->top=-1;
}
2、判断栈为满
/*功能:判断栈为满
*函数名:IsFull
*返回值:为满——真1,非满——假0
*/
BOOL IsFull(stack *p)
{
if(MAXSIZE-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
3、判断栈为空
/*功能:判断栈为空
* 函数名:IsEmpty
*返回值:为空——真1,非空——假0
*/
BOOL IsEmpty(stack *p)
{
if(-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
4、进栈
/*功能:进栈
*函数名:push
*返回值:成功TRUN 失败FALSE
*注:不能为满,否则进栈失败
*/
BOOL push(stack *p,StackType data)//p=&s
{
//判断栈是否为满
if(TRUE==IsFull(p))//为满
{
return FALSE;//返回失败
}
p->buf[++p->top]=data;
return TRUE;//返回成功
}
5、出栈
/*功能:出栈
*函数名:pop
*返回值:出栈成功TRUE 失败FALSE
*/
BOOL pop(stack *p,StackType *pd)
{
//判断是否为空,为空出栈无意义
if(TRUE==IsEmpty(p))
{
return FALSE;//出栈失败
}
*pd=p->buf[p->top--];//优先级->大于--
return TRUE;//出栈成功
}
扩展资料:
主函数:
void main()
{
//定义变量:类型 变量名
//struct st s;
struct st s;//分配空间
//初始化
InitStack(&s);
int num=0;
printf("请输入");
scanf("%d",&num);
//求二进制
while(num!=0)
{
//将余数入栈
if(FALSE==push(&s,num%2))
{
return;//结束
}
num/=2;
}
//将二进制结果取出来
char value=0;
while(FALSE!=pop(&s,&value))
{
printf("%d",value);
}
printf("\n");
}
热心网友
时间:2023-11-20 03:25
1、初始化栈
/*功能:初始化栈
*函数名:InitStack
*返回值:void
*/
void InitStack(stack *p)
{
p->top=-1;
}
2、判断栈为满
/*功能:判断栈为满
*函数名:IsFull
*返回值:为满——真1,非满——假0
*/
BOOL IsFull(stack *p)
{
if(MAXSIZE-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
3、判断栈为空
/*功能:判断栈为空
* 函数名:IsEmpty
*返回值:为空——真1,非空——假0
*/
BOOL IsEmpty(stack *p)
{
if(-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
4、进栈
/*功能:进栈
*函数名:push
*返回值:成功TRUN 失败FALSE
*注:不能为满,否则进栈失败
*/
BOOL push(stack *p,StackType data)//p=&s
{
//判断栈是否为满
if(TRUE==IsFull(p))//为满
{
return FALSE;//返回失败
}
p->buf[++p->top]=data;
return TRUE;//返回成功
}
5、出栈
/*功能:出栈
*函数名:pop
*返回值:出栈成功TRUE 失败FALSE
*/
BOOL pop(stack *p,StackType *pd)
{
//判断是否为空,为空出栈无意义
if(TRUE==IsEmpty(p))
{
return FALSE;//出栈失败
}
*pd=p->buf[p->top--];//优先级->大于--
return TRUE;//出栈成功
}
扩展资料:
主函数:
void main()
{
//定义变量:类型 变量名
//struct st s;
struct st s;//分配空间
//初始化
InitStack(&s);
int num=0;
printf("请输入");
scanf("%d",&num);
//求二进制
while(num!=0)
{
//将余数入栈
if(FALSE==push(&s,num%2))
{
return;//结束
}
num/=2;
}
//将二进制结果取出来
char value=0;
while(FALSE!=pop(&s,&value))
{
printf("%d",value);
}
printf("\n");
}
热心网友
时间:2023-11-20 03:25
1、初始化栈
/*功能:初始化栈
*函数名:InitStack
*返回值:void
*/
void InitStack(stack *p)
{
p->top=-1;
}
2、判断栈为满
/*功能:判断栈为满
*函数名:IsFull
*返回值:为满——真1,非满——假0
*/
BOOL IsFull(stack *p)
{
if(MAXSIZE-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
3、判断栈为空
/*功能:判断栈为空
* 函数名:IsEmpty
*返回值:为空——真1,非空——假0
*/
BOOL IsEmpty(stack *p)
{
if(-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
4、进栈
/*功能:进栈
*函数名:push
*返回值:成功TRUN 失败FALSE
*注:不能为满,否则进栈失败
*/
BOOL push(stack *p,StackType data)//p=&s
{
//判断栈是否为满
if(TRUE==IsFull(p))//为满
{
return FALSE;//返回失败
}
p->buf[++p->top]=data;
return TRUE;//返回成功
}
5、出栈
/*功能:出栈
*函数名:pop
*返回值:出栈成功TRUE 失败FALSE
*/
BOOL pop(stack *p,StackType *pd)
{
//判断是否为空,为空出栈无意义
if(TRUE==IsEmpty(p))
{
return FALSE;//出栈失败
}
*pd=p->buf[p->top--];//优先级->大于--
return TRUE;//出栈成功
}
扩展资料:
主函数:
void main()
{
//定义变量:类型 变量名
//struct st s;
struct st s;//分配空间
//初始化
InitStack(&s);
int num=0;
printf("请输入");
scanf("%d",&num);
//求二进制
while(num!=0)
{
//将余数入栈
if(FALSE==push(&s,num%2))
{
return;//结束
}
num/=2;
}
//将二进制结果取出来
char value=0;
while(FALSE!=pop(&s,&value))
{
printf("%d",value);
}
printf("\n");
}
热心网友
时间:2023-11-20 03:25
#define OK 1
#define TRUE 1
#define ERROR 0
#define FALSE 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define Status int
#define SElemType int
#include "stdio.h"
#include "malloc.h"
/* 栈的操作
SElemType 栈的数据类型
Status InitStatck(SqStack &s) 初始化栈
Status DestoryStatck(SqStack &s) 销毁栈
Status ClearStack(SqStack &s) 清除栈
bool StackEmpty(SqStack s) 栈是否为空
int StackLength(SqStack s) 栈的长度
Status GetTop(SqStack s,SElemType &e) 得到栈顶
Status Push(SqStack &s,SElemType e) 压栈
Status Pop(SqStack &s,SElemType &e) 出栈*/
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
/*==================================
功能: 初始化栈
参数: SqStack
返回:OVERFLOW or TRUE;
//=================================*/
Status InitStatck(SqStack &s){
s.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!s.base)
{
return OVERFLOW;
}
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
/*==================================
功能: 销毁栈
参数: SqStack
返回: OK;
//=================================*/
Status DestoryStatck(SqStack &s){
s.top=s.top;
s.stacksize=0;
free(s.top);
free(s.base);
return OK;
}
/*==================================
功能: 清除栈
参数: SqStack
返回: OK;
//=================================*/
Status ClearStack(SqStack &s){
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
/*==================================
功能: 判断栈是否为空
参数: SqStack
返回: TRUE or FALSE
//=================================*/
bool StackEmpty(SqStack s){
if(s.base==s.top)
{
return TRUE;
}
else
{
return FALSE;
}
}
/*==================================
功能: 得到栈的长度
参数: SqStack
返回: int 栈的长度
//=================================*/
int StackLength(SqStack s){
if(s.base=s.top)
{
return ERROR;
}
else
{
return (s.top-s.base);
}
}
/*==================================
功能: 得到栈的TOP
参数: SqStack ,SElemType
备注: 仅仅得到数据,不出栈;
返回: SElemType类型的数据
//=================================*/
Status GetTop(SqStack s,SElemType &e){
if(StackEmpty(s))
{
printf("this statck is empty !/n");
return ERROR;
}
else
{
e=*(--s.top);
return OK;
}
}
/*==================================
功能: 压栈
参数: SqStack ,SElemType
返回: ERROR OR OK
//=================================*/
Status Push(SqStack &s,SElemType e){
if(StackLength(s)==STACK_INIT_SIZE)
{
SElemType *tem;
tem=(SElemType*)realloc(s.base,
(STACK_INIT_SIZE + STACKINCREMENT) * sizeof(SElemType));
if(!tem)
{
return ERROR;
}
s.base=tem;
s.top=s.base+STACK_INIT_SIZE;
s.stacksize+=STACKINCREMENT;
*(s.top++)=e;
return OK;
}
else
{
*(s.top++)=e;
return OK;
}
}
/*==================================
功能: 出栈
参数: SqStack ,SElemType
返回: ERROR OR OK
//=================================*/
Status Pop(SqStack &s,SElemType &e){
if(StackEmpty(s))
{
printf("this statck is empty !/n");
return ERROR;
}
else
{
e=*(--s.top);
return OK;
}
}
//void StackTraverse(SqStack,void Fun()){
void main(){
SqStack statck;
InitStatck(statck);
for(int i=0;i<5;i++)
{
if(Push(statck,i))
{
printf("%d is push in this statck success!/n",i);
}
else
{
printf("/n/thappen a error/n/t");
}
}
int tem;
printf("now i will print this top of statck !/n");
GetTop(statck,tem);
printf("%d is top of this statck/n",tem);
}追问没法运行,运行不出来啊大哥!
追答可以啊。。。只不过main.cpp上面的转义字符复制过来变了,是反\
热心网友
时间:2023-11-20 03:25
#define OK 1
#define TRUE 1
#define ERROR 0
#define FALSE 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define Status int
#define SElemType int
#include "stdio.h"
#include "malloc.h"
/* 栈的操作
SElemType 栈的数据类型
Status InitStatck(SqStack &s) 初始化栈
Status DestoryStatck(SqStack &s) 销毁栈
Status ClearStack(SqStack &s) 清除栈
bool StackEmpty(SqStack s) 栈是否为空
int StackLength(SqStack s) 栈的长度
Status GetTop(SqStack s,SElemType &e) 得到栈顶
Status Push(SqStack &s,SElemType e) 压栈
Status Pop(SqStack &s,SElemType &e) 出栈*/
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
/*==================================
功能: 初始化栈
参数: SqStack
返回:OVERFLOW or TRUE;
//=================================*/
Status InitStatck(SqStack &s){
s.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!s.base)
{
return OVERFLOW;
}
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
/*==================================
功能: 销毁栈
参数: SqStack
返回: OK;
//=================================*/
Status DestoryStatck(SqStack &s){
s.top=s.top;
s.stacksize=0;
free(s.top);
free(s.base);
return OK;
}
/*==================================
功能: 清除栈
参数: SqStack
返回: OK;
//=================================*/
Status ClearStack(SqStack &s){
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
/*==================================
功能: 判断栈是否为空
参数: SqStack
返回: TRUE or FALSE
//=================================*/
bool StackEmpty(SqStack s){
if(s.base==s.top)
{
return TRUE;
}
else
{
return FALSE;
}
}
/*==================================
功能: 得到栈的长度
参数: SqStack
返回: int 栈的长度
//=================================*/
int StackLength(SqStack s){
if(s.base=s.top)
{
return ERROR;
}
else
{
return (s.top-s.base);
}
}
/*==================================
功能: 得到栈的TOP
参数: SqStack ,SElemType
备注: 仅仅得到数据,不出栈;
返回: SElemType类型的数据
//=================================*/
Status GetTop(SqStack s,SElemType &e){
if(StackEmpty(s))
{
printf("this statck is empty !/n");
return ERROR;
}
else
{
e=*(--s.top);
return OK;
}
}
/*==================================
功能: 压栈
参数: SqStack ,SElemType
返回: ERROR OR OK
//=================================*/
Status Push(SqStack &s,SElemType e){
if(StackLength(s)==STACK_INIT_SIZE)
{
SElemType *tem;
tem=(SElemType*)realloc(s.base,
(STACK_INIT_SIZE + STACKINCREMENT) * sizeof(SElemType));
if(!tem)
{
return ERROR;
}
s.base=tem;
s.top=s.base+STACK_INIT_SIZE;
s.stacksize+=STACKINCREMENT;
*(s.top++)=e;
return OK;
}
else
{
*(s.top++)=e;
return OK;
}
}
/*==================================
功能: 出栈
参数: SqStack ,SElemType
返回: ERROR OR OK
//=================================*/
Status Pop(SqStack &s,SElemType &e){
if(StackEmpty(s))
{
printf("this statck is empty !/n");
return ERROR;
}
else
{
e=*(--s.top);
return OK;
}
}
//void StackTraverse(SqStack,void Fun()){
void main(){
SqStack statck;
InitStatck(statck);
for(int i=0;i<5;i++)
{
if(Push(statck,i))
{
printf("%d is push in this statck success!/n",i);
}
else
{
printf("/n/thappen a error/n/t");
}
}
int tem;
printf("now i will print this top of statck !/n");
GetTop(statck,tem);
printf("%d is top of this statck/n",tem);
}追问没法运行,运行不出来啊大哥!
追答可以啊。。。只不过main.cpp上面的转义字符复制过来变了,是反\
热心网友
时间:2023-11-20 03:25
1、初始化栈
/*功能:初始化栈
*函数名:InitStack
*返回值:void
*/
void InitStack(stack *p)
{
p->top=-1;
}
2、判断栈为满
/*功能:判断栈为满
*函数名:IsFull
*返回值:为满——真1,非满——假0
*/
BOOL IsFull(stack *p)
{
if(MAXSIZE-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
3、判断栈为空
/*功能:判断栈为空
* 函数名:IsEmpty
*返回值:为空——真1,非空——假0
*/
BOOL IsEmpty(stack *p)
{
if(-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
4、进栈
/*功能:进栈
*函数名:push
*返回值:成功TRUN 失败FALSE
*注:不能为满,否则进栈失败
*/
BOOL push(stack *p,StackType data)//p=&s
{
//判断栈是否为满
if(TRUE==IsFull(p))//为满
{
return FALSE;//返回失败
}
p->buf[++p->top]=data;
return TRUE;//返回成功
}
5、出栈
/*功能:出栈
*函数名:pop
*返回值:出栈成功TRUE 失败FALSE
*/
BOOL pop(stack *p,StackType *pd)
{
//判断是否为空,为空出栈无意义
if(TRUE==IsEmpty(p))
{
return FALSE;//出栈失败
}
*pd=p->buf[p->top--];//优先级->大于--
return TRUE;//出栈成功
}
扩展资料:
主函数:
void main()
{
//定义变量:类型 变量名
//struct st s;
struct st s;//分配空间
//初始化
InitStack(&s);
int num=0;
printf("请输入");
scanf("%d",&num);
//求二进制
while(num!=0)
{
//将余数入栈
if(FALSE==push(&s,num%2))
{
return;//结束
}
num/=2;
}
//将二进制结果取出来
char value=0;
while(FALSE!=pop(&s,&value))
{
printf("%d",value);
}
printf("\n");
}
热心网友
时间:2023-11-20 03:25
#define OK 1
#define TRUE 1
#define ERROR 0
#define FALSE 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define Status int
#define SElemType int
#include "stdio.h"
#include "malloc.h"
/* 栈的操作
SElemType 栈的数据类型
Status InitStatck(SqStack &s) 初始化栈
Status DestoryStatck(SqStack &s) 销毁栈
Status ClearStack(SqStack &s) 清除栈
bool StackEmpty(SqStack s) 栈是否为空
int StackLength(SqStack s) 栈的长度
Status GetTop(SqStack s,SElemType &e) 得到栈顶
Status Push(SqStack &s,SElemType e) 压栈
Status Pop(SqStack &s,SElemType &e) 出栈*/
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
/*==================================
功能: 初始化栈
参数: SqStack
返回:OVERFLOW or TRUE;
//=================================*/
Status InitStatck(SqStack &s){
s.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!s.base)
{
return OVERFLOW;
}
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
/*==================================
功能: 销毁栈
参数: SqStack
返回: OK;
//=================================*/
Status DestoryStatck(SqStack &s){
s.top=s.top;
s.stacksize=0;
free(s.top);
free(s.base);
return OK;
}
/*==================================
功能: 清除栈
参数: SqStack
返回: OK;
//=================================*/
Status ClearStack(SqStack &s){
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
/*==================================
功能: 判断栈是否为空
参数: SqStack
返回: TRUE or FALSE
//=================================*/
bool StackEmpty(SqStack s){
if(s.base==s.top)
{
return TRUE;
}
else
{
return FALSE;
}
}
/*==================================
功能: 得到栈的长度
参数: SqStack
返回: int 栈的长度
//=================================*/
int StackLength(SqStack s){
if(s.base=s.top)
{
return ERROR;
}
else
{
return (s.top-s.base);
}
}
/*==================================
功能: 得到栈的TOP
参数: SqStack ,SElemType
备注: 仅仅得到数据,不出栈;
返回: SElemType类型的数据
//=================================*/
Status GetTop(SqStack s,SElemType &e){
if(StackEmpty(s))
{
printf("this statck is empty !/n");
return ERROR;
}
else
{
e=*(--s.top);
return OK;
}
}
/*==================================
功能: 压栈
参数: SqStack ,SElemType
返回: ERROR OR OK
//=================================*/
Status Push(SqStack &s,SElemType e){
if(StackLength(s)==STACK_INIT_SIZE)
{
SElemType *tem;
tem=(SElemType*)realloc(s.base,
(STACK_INIT_SIZE + STACKINCREMENT) * sizeof(SElemType));
if(!tem)
{
return ERROR;
}
s.base=tem;
s.top=s.base+STACK_INIT_SIZE;
s.stacksize+=STACKINCREMENT;
*(s.top++)=e;
return OK;
}
else
{
*(s.top++)=e;
return OK;
}
}
/*==================================
功能: 出栈
参数: SqStack ,SElemType
返回: ERROR OR OK
//=================================*/
Status Pop(SqStack &s,SElemType &e){
if(StackEmpty(s))
{
printf("this statck is empty !/n");
return ERROR;
}
else
{
e=*(--s.top);
return OK;
}
}
//void StackTraverse(SqStack,void Fun()){
void main(){
SqStack statck;
InitStatck(statck);
for(int i=0;i<5;i++)
{
if(Push(statck,i))
{
printf("%d is push in this statck success!/n",i);
}
else
{
printf("/n/thappen a error/n/t");
}
}
int tem;
printf("now i will print this top of statck !/n");
GetTop(statck,tem);
printf("%d is top of this statck/n",tem);
}追问没法运行,运行不出来啊大哥!
追答可以啊。。。只不过main.cpp上面的转义字符复制过来变了,是反\
热心网友
时间:2023-11-20 03:26
数据结构书上不都有么?
热心网友
时间:2023-11-20 03:25
#define OK 1
#define TRUE 1
#define ERROR 0
#define FALSE 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define Status int
#define SElemType int
#include "stdio.h"
#include "malloc.h"
/* 栈的操作
SElemType 栈的数据类型
Status InitStatck(SqStack &s) 初始化栈
Status DestoryStatck(SqStack &s) 销毁栈
Status ClearStack(SqStack &s) 清除栈
bool StackEmpty(SqStack s) 栈是否为空
int StackLength(SqStack s) 栈的长度
Status GetTop(SqStack s,SElemType &e) 得到栈顶
Status Push(SqStack &s,SElemType e) 压栈
Status Pop(SqStack &s,SElemType &e) 出栈*/
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
/*==================================
功能: 初始化栈
参数: SqStack
返回:OVERFLOW or TRUE;
//=================================*/
Status InitStatck(SqStack &s){
s.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!s.base)
{
return OVERFLOW;
}
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
/*==================================
功能: 销毁栈
参数: SqStack
返回: OK;
//=================================*/
Status DestoryStatck(SqStack &s){
s.top=s.top;
s.stacksize=0;
free(s.top);
free(s.base);
return OK;
}
/*==================================
功能: 清除栈
参数: SqStack
返回: OK;
//=================================*/
Status ClearStack(SqStack &s){
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
/*==================================
功能: 判断栈是否为空
参数: SqStack
返回: TRUE or FALSE
//=================================*/
bool StackEmpty(SqStack s){
if(s.base==s.top)
{
return TRUE;
}
else
{
return FALSE;
}
}
/*==================================
功能: 得到栈的长度
参数: SqStack
返回: int 栈的长度
//=================================*/
int StackLength(SqStack s){
if(s.base=s.top)
{
return ERROR;
}
else
{
return (s.top-s.base);
}
}
/*==================================
功能: 得到栈的TOP
参数: SqStack ,SElemType
备注: 仅仅得到数据,不出栈;
返回: SElemType类型的数据
//=================================*/
Status GetTop(SqStack s,SElemType &e){
if(StackEmpty(s))
{
printf("this statck is empty !/n");
return ERROR;
}
else
{
e=*(--s.top);
return OK;
}
}
/*==================================
功能: 压栈
参数: SqStack ,SElemType
返回: ERROR OR OK
//=================================*/
Status Push(SqStack &s,SElemType e){
if(StackLength(s)==STACK_INIT_SIZE)
{
SElemType *tem;
tem=(SElemType*)realloc(s.base,
(STACK_INIT_SIZE + STACKINCREMENT) * sizeof(SElemType));
if(!tem)
{
return ERROR;
}
s.base=tem;
s.top=s.base+STACK_INIT_SIZE;
s.stacksize+=STACKINCREMENT;
*(s.top++)=e;
return OK;
}
else
{
*(s.top++)=e;
return OK;
}
}
/*==================================
功能: 出栈
参数: SqStack ,SElemType
返回: ERROR OR OK
//=================================*/
Status Pop(SqStack &s,SElemType &e){
if(StackEmpty(s))
{
printf("this statck is empty !/n");
return ERROR;
}
else
{
e=*(--s.top);
return OK;
}
}
//void StackTraverse(SqStack,void Fun()){
void main(){
SqStack statck;
InitStatck(statck);
for(int i=0;i<5;i++)
{
if(Push(statck,i))
{
printf("%d is push in this statck success!/n",i);
}
else
{
printf("/n/thappen a error/n/t");
}
}
int tem;
printf("now i will print this top of statck !/n");
GetTop(statck,tem);
printf("%d is top of this statck/n",tem);
}追问没法运行,运行不出来啊大哥!
追答可以啊。。。只不过main.cpp上面的转义字符复制过来变了,是反\
热心网友
时间:2023-11-20 03:26
数据结构书上不都有么?
热心网友
时间:2023-11-20 03:25
#define OK 1
#define TRUE 1
#define ERROR 0
#define FALSE 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define Status int
#define SElemType int
#include "stdio.h"
#include "malloc.h"
/* 栈的操作
SElemType 栈的数据类型
Status InitStatck(SqStack &s) 初始化栈
Status DestoryStatck(SqStack &s) 销毁栈
Status ClearStack(SqStack &s) 清除栈
bool StackEmpty(SqStack s) 栈是否为空
int StackLength(SqStack s) 栈的长度
Status GetTop(SqStack s,SElemType &e) 得到栈顶
Status Push(SqStack &s,SElemType e) 压栈
Status Pop(SqStack &s,SElemType &e) 出栈*/
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
/*==================================
功能: 初始化栈
参数: SqStack
返回:OVERFLOW or TRUE;
//=================================*/
Status InitStatck(SqStack &s){
s.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!s.base)
{
return OVERFLOW;
}
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
/*==================================
功能: 销毁栈
参数: SqStack
返回: OK;
//=================================*/
Status DestoryStatck(SqStack &s){
s.top=s.top;
s.stacksize=0;
free(s.top);
free(s.base);
return OK;
}
/*==================================
功能: 清除栈
参数: SqStack
返回: OK;
//=================================*/
Status ClearStack(SqStack &s){
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
/*==================================
功能: 判断栈是否为空
参数: SqStack
返回: TRUE or FALSE
//=================================*/
bool StackEmpty(SqStack s){
if(s.base==s.top)
{
return TRUE;
}
else
{
return FALSE;
}
}
/*==================================
功能: 得到栈的长度
参数: SqStack
返回: int 栈的长度
//=================================*/
int StackLength(SqStack s){
if(s.base=s.top)
{
return ERROR;
}
else
{
return (s.top-s.base);
}
}
/*==================================
功能: 得到栈的TOP
参数: SqStack ,SElemType
备注: 仅仅得到数据,不出栈;
返回: SElemType类型的数据
//=================================*/
Status GetTop(SqStack s,SElemType &e){
if(StackEmpty(s))
{
printf("this statck is empty !/n");
return ERROR;
}
else
{
e=*(--s.top);
return OK;
}
}
/*==================================
功能: 压栈
参数: SqStack ,SElemType
返回: ERROR OR OK
//=================================*/
Status Push(SqStack &s,SElemType e){
if(StackLength(s)==STACK_INIT_SIZE)
{
SElemType *tem;
tem=(SElemType*)realloc(s.base,
(STACK_INIT_SIZE + STACKINCREMENT) * sizeof(SElemType));
if(!tem)
{
return ERROR;
}
s.base=tem;
s.top=s.base+STACK_INIT_SIZE;
s.stacksize+=STACKINCREMENT;
*(s.top++)=e;
return OK;
}
else
{
*(s.top++)=e;
return OK;
}
}
/*==================================
功能: 出栈
参数: SqStack ,SElemType
返回: ERROR OR OK
//=================================*/
Status Pop(SqStack &s,SElemType &e){
if(StackEmpty(s))
{
printf("this statck is empty !/n");
return ERROR;
}
else
{
e=*(--s.top);
return OK;
}
}
//void StackTraverse(SqStack,void Fun()){
void main(){
SqStack statck;
InitStatck(statck);
for(int i=0;i<5;i++)
{
if(Push(statck,i))
{
printf("%d is push in this statck success!/n",i);
}
else
{
printf("/n/thappen a error/n/t");
}
}
int tem;
printf("now i will print this top of statck !/n");
GetTop(statck,tem);
printf("%d is top of this statck/n",tem);
}追问没法运行,运行不出来啊大哥!
追答可以啊。。。只不过main.cpp上面的转义字符复制过来变了,是反\
热心网友
时间:2023-11-20 03:26
数据结构书上不都有么?
热心网友
时间:2023-11-20 03:25
#define OK 1
#define TRUE 1
#define ERROR 0
#define FALSE 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define Status int
#define SElemType int
#include "stdio.h"
#include "malloc.h"
/* 栈的操作
SElemType 栈的数据类型
Status InitStatck(SqStack &s) 初始化栈
Status DestoryStatck(SqStack &s) 销毁栈
Status ClearStack(SqStack &s) 清除栈
bool StackEmpty(SqStack s) 栈是否为空
int StackLength(SqStack s) 栈的长度
Status GetTop(SqStack s,SElemType &e) 得到栈顶
Status Push(SqStack &s,SElemType e) 压栈
Status Pop(SqStack &s,SElemType &e) 出栈*/
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
/*==================================
功能: 初始化栈
参数: SqStack
返回:OVERFLOW or TRUE;
//=================================*/
Status InitStatck(SqStack &s){
s.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!s.base)
{
return OVERFLOW;
}
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
/*==================================
功能: 销毁栈
参数: SqStack
返回: OK;
//=================================*/
Status DestoryStatck(SqStack &s){
s.top=s.top;
s.stacksize=0;
free(s.top);
free(s.base);
return OK;
}
/*==================================
功能: 清除栈
参数: SqStack
返回: OK;
//=================================*/
Status ClearStack(SqStack &s){
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
/*==================================
功能: 判断栈是否为空
参数: SqStack
返回: TRUE or FALSE
//=================================*/
bool StackEmpty(SqStack s){
if(s.base==s.top)
{
return TRUE;
}
else
{
return FALSE;
}
}
/*==================================
功能: 得到栈的长度
参数: SqStack
返回: int 栈的长度
//=================================*/
int StackLength(SqStack s){
if(s.base=s.top)
{
return ERROR;
}
else
{
return (s.top-s.base);
}
}
/*==================================
功能: 得到栈的TOP
参数: SqStack ,SElemType
备注: 仅仅得到数据,不出栈;
返回: SElemType类型的数据
//=================================*/
Status GetTop(SqStack s,SElemType &e){
if(StackEmpty(s))
{
printf("this statck is empty !/n");
return ERROR;
}
else
{
e=*(--s.top);
return OK;
}
}
/*==================================
功能: 压栈
参数: SqStack ,SElemType
返回: ERROR OR OK
//=================================*/
Status Push(SqStack &s,SElemType e){
if(StackLength(s)==STACK_INIT_SIZE)
{
SElemType *tem;
tem=(SElemType*)realloc(s.base,
(STACK_INIT_SIZE + STACKINCREMENT) * sizeof(SElemType));
if(!tem)
{
return ERROR;
}
s.base=tem;
s.top=s.base+STACK_INIT_SIZE;
s.stacksize+=STACKINCREMENT;
*(s.top++)=e;
return OK;
}
else
{
*(s.top++)=e;
return OK;
}
}
/*==================================
功能: 出栈
参数: SqStack ,SElemType
返回: ERROR OR OK
//=================================*/
Status Pop(SqStack &s,SElemType &e){
if(StackEmpty(s))
{
printf("this statck is empty !/n");
return ERROR;
}
else
{
e=*(--s.top);
return OK;
}
}
//void StackTraverse(SqStack,void Fun()){
void main(){
SqStack statck;
InitStatck(statck);
for(int i=0;i<5;i++)
{
if(Push(statck,i))
{
printf("%d is push in this statck success!/n",i);
}
else
{
printf("/n/thappen a error/n/t");
}
}
int tem;
printf("now i will print this top of statck !/n");
GetTop(statck,tem);
printf("%d is top of this statck/n",tem);
}追问没法运行,运行不出来啊大哥!
追答可以啊。。。只不过main.cpp上面的转义字符复制过来变了,是反\
热心网友
时间:2023-11-20 03:26
数据结构书上不都有么?
热心网友
时间:2023-11-20 03:26
数据结构书上不都有么?
热心网友
时间:2023-11-20 03:26
数据结构书上不都有么?
热心网友
时间:2023-11-20 03:25
1、初始化栈
/*功能:初始化栈
*函数名:InitStack
*返回值:void
*/
void InitStack(stack *p)
{
p->top=-1;
}
2、判断栈为满
/*功能:判断栈为满
*函数名:IsFull
*返回值:为满——真1,非满——假0
*/
BOOL IsFull(stack *p)
{
if(MAXSIZE-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
3、判断栈为空
/*功能:判断栈为空
* 函数名:IsEmpty
*返回值:为空——真1,非空——假0
*/
BOOL IsEmpty(stack *p)
{
if(-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
4、进栈
/*功能:进栈
*函数名:push
*返回值:成功TRUN 失败FALSE
*注:不能为满,否则进栈失败
*/
BOOL push(stack *p,StackType data)//p=&s
{
//判断栈是否为满
if(TRUE==IsFull(p))//为满
{
return FALSE;//返回失败
}
p->buf[++p->top]=data;
return TRUE;//返回成功
}
5、出栈
/*功能:出栈
*函数名:pop
*返回值:出栈成功TRUE 失败FALSE
*/
BOOL pop(stack *p,StackType *pd)
{
//判断是否为空,为空出栈无意义
if(TRUE==IsEmpty(p))
{
return FALSE;//出栈失败
}
*pd=p->buf[p->top--];//优先级->大于--
return TRUE;//出栈成功
}
扩展资料:
主函数:
void main()
{
//定义变量:类型 变量名
//struct st s;
struct st s;//分配空间
//初始化
InitStack(&s);
int num=0;
printf("请输入");
scanf("%d",&num);
//求二进制
while(num!=0)
{
//将余数入栈
if(FALSE==push(&s,num%2))
{
return;//结束
}
num/=2;
}
//将二进制结果取出来
char value=0;
while(FALSE!=pop(&s,&value))
{
printf("%d",value);
}
printf("\n");
}
热心网友
时间:2023-11-20 03:25
1、初始化栈
/*功能:初始化栈
*函数名:InitStack
*返回值:void
*/
void InitStack(stack *p)
{
p->top=-1;
}
2、判断栈为满
/*功能:判断栈为满
*函数名:IsFull
*返回值:为满——真1,非满——假0
*/
BOOL IsFull(stack *p)
{
if(MAXSIZE-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
3、判断栈为空
/*功能:判断栈为空
* 函数名:IsEmpty
*返回值:为空——真1,非空——假0
*/
BOOL IsEmpty(stack *p)
{
if(-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
4、进栈
/*功能:进栈
*函数名:push
*返回值:成功TRUN 失败FALSE
*注:不能为满,否则进栈失败
*/
BOOL push(stack *p,StackType data)//p=&s
{
//判断栈是否为满
if(TRUE==IsFull(p))//为满
{
return FALSE;//返回失败
}
p->buf[++p->top]=data;
return TRUE;//返回成功
}
5、出栈
/*功能:出栈
*函数名:pop
*返回值:出栈成功TRUE 失败FALSE
*/
BOOL pop(stack *p,StackType *pd)
{
//判断是否为空,为空出栈无意义
if(TRUE==IsEmpty(p))
{
return FALSE;//出栈失败
}
*pd=p->buf[p->top--];//优先级->大于--
return TRUE;//出栈成功
}
扩展资料:
主函数:
void main()
{
//定义变量:类型 变量名
//struct st s;
struct st s;//分配空间
//初始化
InitStack(&s);
int num=0;
printf("请输入");
scanf("%d",&num);
//求二进制
while(num!=0)
{
//将余数入栈
if(FALSE==push(&s,num%2))
{
return;//结束
}
num/=2;
}
//将二进制结果取出来
char value=0;
while(FALSE!=pop(&s,&value))
{
printf("%d",value);
}
printf("\n");
}