数据结构的用法栈

#ifndef STATUS_H
#define STATUS_H
//函数结果状态代码
 #define TRUE 1
 #define FALSE 0
 #define OK 1
 #define ERROR 0
 #define INFEASIBLE -1
 #define OVERFLOW -2
 //Status是函数的类型,其值是函数结果状态代码
  typedef int Status;
  typedef int SElemType;
 #endif

```cpp
#ifndef STACK_H
#define STACK_H
#include <stdio.h>
#include "status.h"
#define  STACK_INIT_SIZE   100        //线性表存储空间的初始分配量
#define STACKINCREMENT 10         //线性表存储空间的分配增量 
typedef  struct {
		SElemType  *top;         //指向栈顶 
		SElemType  *base;        //指向栈尾 
		int size;                                 
		}SqStack;
Status InitStack(SqStack *s);//初始化栈 
Status Push(SqStack *s,SElemType e);//入栈 
Status Pop(SqStack *s,SElemType *e);//出栈 
Status GetTop(SqStack *s,SElemType *e);//栈顶 
Status StackEmpty(SqStack *s);//判断是否为空 
#endif

```cpp
#include <stdio.h>
#include "status.h"	
#include "stack.h"
Status InitStack(SqStack *s){
	s->base=(SqStack*)malloc(STACK_INIT_SIZE*sizeof(SqStack));
	s->top=s->base;
	s->size=STACK_INIT_SIZE;
}
Status Push(SqStack *s,SElemType e){
//现实生活	
//首先判断栈是否已满,若满则重新扩展空间
	if((s->top-s->base) >= s->size) {
	s->base = (SElemType *)realloc(s->base,(s->size+STACKINCREMENT)*sizeof(SElemType));
 
	if(!s->base) exit(OVERFLOW);
//田园生活 运行的情况		
		s->top = s->base+s->size ;
		s->size += STACKINCREMENT ;
	}
	*s->top++ = e ;
	return OK ;
} 
Status Pop(SqStack *s,SElemType *e){
	//出栈首先要判断栈是否为空,若为空则返回error
	if(s->top==s->base) 
	return ERROR ;
	e=*--s->top;    //先减后取
	return OK ;
}
Status GetTop(SqStack *s,SElemType *e){
	//判断栈是否为空,若为空则返回error
	if(s->base==s->top)
		return ERROR ;
	e = *(s->top-1);//取地址里的值
	return OK ;


} 
Status StackEmpty(SqStack *s){
	if(s->base==s->top){
		return OK;
	}else
	return  ERROR;

}
```cpp
#include <stdio.h>
#include "stack.h"
int main(){
	SqStack *sqlist;
	SqStack *s=&sqlist;
	int n,i,t;
	SElemType *e;
/**********************************************
        初始化栈
**********************************************/
	InitStack(s);
	printf("%d\n",s->size);
/**********************************************
        入栈
**********************************************/
    printf("请输入插入的个数"); 
    scanf("%d",&n);
    for(i=1;i<=n;i++){
    printf("请输入%d个数为",i); 
    scanf("%d",&e); 
   	Push(s,e);
    }
/**********************************************
        出栈
**********************************************/
	Pop(s,&e);
	printf("出栈的元素为 %d\n",e);
    
/**********************************************
        输出栈顶元素 
**********************************************/
    GetTop(s,e); 
    printf("栈顶元素为%d\n",e);
/**********************************************
        判断栈是否为空 
**********************************************/    
    StackEmpty(s); 
    if(t==OK){
    	printf("栈为空\n");
    }else{
    printf("栈不为空\n");
	}
    

}

!在这里插入图片描述



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值