数据结构栈操作

9 篇文章 0 订阅
1 篇文章 0 订阅
/*本程序主要是实现以下功能
    进栈、 出栈、 判空、 判满、 清空、 获取栈元素的长度、 栈顶元素
    销毁、 创建
*/
/* main.c */
#include<stdio.h>
#include"sstack.h"
int main(void)
{

    stack mystack = CreateStack();

    PushStack(mystack,11);
    PushStack(mystack,22);
    PushStack(mystack,33);
    ClearStack(mystack);
    
    while(!StackIsEmpty(mystack)){
        printf("pop:%d\n",PopStack(mystack));
    }
    PushStack(mystack,22);
    PushStack(mystack,33);

    getStack(mystack);
   
    
    while(!StackIsEmpty(mystack)){
        printf("pop:%d\n",PopStack(mystack));
    }


    return 0;
}
/* sstack.c */
#include<stdio.h>
#include<stdlib.h>
#include"sstack.h"


// 创建一个栈
stack CreateStack(void)
{
    stack  s = malloc(sizeof(Snode));
    if ( NULL == s )
    {
        printf("malloc error\n");
        return NULL;
    }
    s->top = -1; 

    return s;
}

// 判断栈是否满
int StackIsFull(stack S)
{
    if ( S->top == MAX-1 )
    {
        return TRUE;
    }
    else 
    {
        return FALSE;
    }
}

// 进栈
data_t PushStack(stack S,data_t val)
{
    if ( TRUE == StackIsFull(S) )
    {
        printf("stack is full\n");
        return ERROR;
    }
    S->top++;
    S->a[S->top] = val;

    return S->a[S->top];

}
// 判断栈是否为空
int StackIsEmpty(stack S)
{
    if(S->top == -1)
    {
        return TRUE;
    }
    else {
        return FALSE;
    }
}

// 出栈
data_t PopStack(stack S)
{
    if ( StackIsEmpty(S) )
    {
        printf("stack is empty\n");
        return ERROR;
    }

    data_t val = S->a[S->top];
    S->top--;

    return val;
}

// 清空栈
int ClearStack(stack S)
{
   S->top = -1;
}

// 取栈顶元素
data_t getStack(stack S)
{
    printf("%d\n",S->a[S->top]);
    return S -> a[S->top];

}

// 获取栈元素长度
int GetStackLenth(stack S)
{
    int len = S->top + 1;
    return len;
}

// 销毁
void Destroy(stack S)
{
    free(S);
}
/* sstack.h */
#ifndef _SSTACK_H
#define _SSTACK_H
#define MAX  10

#define TRUE 1
#define FALSE 0
#define ERROR -1
#define OK 1

typedef int data_t;

struct snode{
    data_t a[MAX];
    int top; //记录栈顶元素下标
};
typedef struct snode Snode;
typedef struct snode * stack;

stack CreateStack(void);                       // 创建空栈
int StackIsFull(stack S);                      // 判断栈是否满
data_t PushStack(stack S,data_t val);          // 进栈
int StackIsEmpty(stack S);                     // 判断栈是否为空
data_t PopStack(stack S);                      // 出栈
int ClearStack(stack S);                       // 清空栈
data_t getStack(stack S);                      // 取栈顶元素
void Destroy(stack S);                         // 销毁
int GetStackLenth(stack S);                    // 获取栈元素长度
    
#endif




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值