数据结构链栈

#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 Node{
		struct Node *next;
        SElemType date;                 
		}stack;
typedef  struct Stack{
		 stack *top;
		 int length;               
		}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){//初始化栈 
    if(s==NULL){
    	return ERROR;
    } 
	s->top=NULL;
	s->length=0;
	return OK;
}
Status Push(SqStack *s,SElemType e){//入栈 
	 if(s==NULL){
    	return ERROR;
    } 
    stack *p=(stack*)malloc(sizeof(stack));
    p->next=s->top;
    p->date=e;
    s->top=p;
    s->length++;
    return OK;
    
}
Status Pop(SqStack *s,SElemType *e){//出栈 
    
if(s==NULL&&s->length){
    	return ERROR;
    }
	stack *p=s->top;//设置定海神针
	*e=p->next->date;//之后依次取
	 s->top=p->next;
	s->length--; 
/*
	stack *p;
	*e=s->top->date;
	p=s->top;
	s->top=s->top->next;
	s->length--;*/
	return OK;
}
Status GetTop(SqStack *s,SElemType *e){//获得栈顶元素 
	stack *p=s->top;//设置定海神针
	*e=p->date;//之后依次取
	return OK;
}
Status StackEmpty(SqStack *s){//判断栈是否为空 
if(s==NULL)//头指针为空就是空栈
	return TRUE;
else
	return FALSE;
	
}

```cpp
#include <stdio.h>
#include "stack.h"
int main(){
	SqStack *s;
    SqStack sq;
    int n,i,t;
    SElemType e;
    s=&sq;
    InitStack(s);
    printf("当前长度为%d\n",s->length);
    printf("请输入你想要输入数的个数\n");
    scanf("%d",&n); 
    for(i=1;i<=n;i++){
   	printf("你输入的第%d个数为:",i);
    	scanf("%d",&e);
    	Push(s,e);
    }
    printf("\n");
    t=Push(s,e);
    if(t==OK)
    printf("链栈不为空\n");
    else
    printf("链栈为空\n");
    printf("\n");
  
     GetTop(s,&e);
    printf("栈顶元素为:%d\n",e);
    
    printf("\n");
     t=StackEmpty(s);
     if(t==TRUE)
     	printf("栈链表为空\n");
     else
     printf("栈链表不为空\n");
     printf("\n");
     printf("栈链表依次出栈\n");
    while(s!=NULL){
   	    Pop(s,&e);
    	 printf("%d \n",e);
    }
    /*
for(i=1;i<=n;i++){
   	 printf("依次出栈\n");
   	  Pop(s,&e);
    	 printf("%d \n",e);
    }*/
    return 0;
}

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200510180026442.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0phdmFwcmludGY=,size_16,color_FFFFFF,t_70)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值