数据结构 学习笔记之:顺序栈的C语言实现

//
更多原创“uC/OS-II学习笔记之:系列”基础及嵌入式相关知识详解,请访问可乐虎博客:
相信不会让您失望!!
//
//写篇顺序栈,与大家共勉!
//不足错误之处,望指教!
#include <stdio.h>
#include <math.h>
#include <stdlib.h> 

#define TRUE  1
#define FALSE 0
#define STACK_SIZE 5
typedef int ElementType; 

//定义结构体
typedef struct SeqStack 
{
    ElementType array[STACK_SIZE];
    ElementType top;
}SEQSTACK; 

//初始化顺序栈
bool InitStack(SEQSTACK *pS)
{
    if (!pS)//内存分配失败
    {
        return FALSE;
    }
    pS->top = -1;
    
    return TRUE;
}

//判断是否为空
bool IsEmpty(SEQSTACK *pS)
{
    if (pS->top < 0)
    {
        return TRUE;
    }
    else 
    {
        return FALSE;
    }
}

//判断是否为满
bool IsFull(SEQSTACK *pS)
{
    if (pS->top == STACK_SIZE-1)
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}

//压栈(入栈)
bool PushStack(SEQSTACK *pS, ElementType element)
{
    if (IsFull(pS))
    {
        return FALSE;
    }
    pS->top++;
    pS->array[pS->top] = element;
    
    return TRUE;
}

//出栈
ElementType PopStack(SEQSTACK *pS)
{
    ElementType element;

    if (IsEmpty(pS))
    {
        return FALSE;
    }
    element = pS->array[pS->top];
    pS->top--;
    printf("element=%d\n", element);

    return element;
}

//获取栈顶元素
ElementType GetTop(SEQSTACK *pS)
{
    ElementType element;
    
    if (IsEmpty(pS))
    {
        return FALSE;
    }
    element = pS->array[pS->top];
    printf("element=%d\n", element);
    
    return element;
}

//置空顺序栈
void SetEmpty(SEQSTACK *pS)
{
    pS->top = -1;
    
    return;
}

//遍历顺序栈
bool TraStack(SEQSTACK *pS)
{
    ElementType element;
    
	if (IsEmpty(pS))
    {
        return FALSE;
    }
    while (pS->top > -1)
    {
        element = pS->array[pS->top];
        pS->top--;
	    printf("element=%d\n", element);
    }

    return TRUE;
}

//主函数
int main(void)
{
    SEQSTACK *pS;//定义一个指向结构体变量的指针	
    pS = (SEQSTACK *)malloc(sizeof(SEQSTACK));
    //下面函数的参数使用p和&pS是等效的
    InitStack(pS);//初始化

    PushStack(pS, 1);//压栈
    PushStack(pS, 2);
    PushStack(pS, 3);
    PushStack(pS, 4);
    PushStack(pS, 5);

    GetTop(pS);//取栈顶元素
    printf("\n");
    PopStack(pS);//出栈	
    printf("\n");
    TraStack(pS);//遍历栈

    free(pS);//释放pS所占内存空间

    return 0;
}


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值