数据结构栈存储方法1

  #include <stdio.h>
  #include "stack.h"
  #include "status.h"
  Status InitStack(SqStack *s){//初始化 
  	s->elem=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
  	if(s->elem==NULL)
  	{
	  	return ERROR;
    }
    s->length=0;
    s->listsize=STACK_INIT_SIZE;
    return OK;
  	
  }
  Status Push(SqStack *s,SElemType e){
          	//是否满,扩容
          
	if(s->length==s->listsize)
          	{
	          s->elem=(SElemType *)realloc(s->elem,(s->listsize+STACKINCREMENT)*sizeof(SElemType));
	          if(s->elem==NULL)
	          {
          		return ERROR;
          	 }
	          }
			  s->elem[s->length]=e;//原本 s->length=0;s->elem[0] =第一个数 ;之后依次进栈 
			  s->length++ ;  
			  printf("当前长度验算%d \n",s->length);      //长度依次增加 
			  return OK;
          	
          }
 
Status Pop(SqStack *s,SElemType *e){
          	*e=s->elem[s->length-1];
			s->length--;
			return OK;   
 
          }
          
Status GetTop(SqStack *s,SElemType *e){//用  e返回 
            int t;
            t=s->length;
            printf("当前长度为%d",t);
          	*e=s->elem[t-1]; 
          	return OK;
          }
 Status StackEmpty(SqStack *s){
 	printf("%d",s->length);
          	if(s->length==0){
	          	return OK;
	          } else
			  return ERROR; 
          }
#include <stdio.h>
#include "stack.h"
int main(){
	SqStack sq;
	SElemType e;
	int t,i,value,n;
	SqStack *s=&sq;
	InitStack(s); 
	printf("线性表的当前长度 :%d\n",s->length);
	printf("线性表的当前分配的存储容量  :%d\n",s->listsize);
	printf("向栈中插入元素\n");
	printf("请输入插入的个数:");
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		printf("请输入第%d个数为",i);
		scanf("%d",&e);
		Push(s,e);
	} 

	if(t==ERROR){
		printf("入栈异常\n");
	} else{
		printf("入栈成功\n");
	} 
	printf("出栈运行\n"); 
	printf("开始\n");
	
	t=StackEmpty(s);
	if(t==OK){
		printf("为空\n");
	}else
	printf("不为空");
	
	GetTop(s,&e);
	printf("栈顶元素为%d\n",e); 
	
    for (;s->length;) {
     	//printf("%d ",s->length);
			Pop(s, &e);
		printf("出栈结果%d \n", e);	
	}
	

	}
#ifndef STACK_H
#define STACK_H
#include <stdio.h>
#include "status.h"
#define  STACK_INIT_SIZE   100        //线性表存储空间的初始分配量
#define STACKINCREMENT 10         //线性表存储空间的分配增量 
typedef  struct {
		SElemType  *elem;         //指向存放线性表中数据元素的基地址
		int  length;          //线性表的当前长度   
  		int  listsize;        //当前分配的存储容量                                           
		}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
#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
 
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200509075838718.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0phdmFwcmludGY=,size_16,color_FFFFFF,t_70#pic_center)
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值