对栈的实现(顺序栈和链式栈)C语言

本文介绍了栈的两种实现方式——顺序栈和链式栈,分别基于静态顺序表和链表。详细阐述了函数结构体的声明和定义,并提供了相应的单元测试代码供读者参考和验证。
摘要由CSDN通过智能技术生成

栈的实现

两种方法实现:

  • 顺序栈
    :基于静态顺序表
  • 链式栈
    :基于链表

    顺序栈

函数的结构体和声明

基于顺序表的栈,也就是用数组的增删查改
我们看结构体和声明
typedef char SeqType;

typedef struct SeqStack{
    size_t size;
    SeqType data[MAXREPOSITORY];
}SeqStack;

// 初始化。
void SeqStackInit(SeqStack *seq);

// 入栈。
void SeqStackPushStack(SeqStack *seq, SeqType value);

// 出栈。
void SeqStackPopStack(SeqStack *seq);

// 取栈顶元素。
int SeqStackFindTop(SeqStack *seq, SeqType *value);

// 销毁。
void SeqStackDestory(SeqStack *seq);

函数的定义

#include "SeqStack.h"

// 函数在初始化时候已经为其开辟空间所以这里是要初始化就行
// 初始化。
void SeqStackInit(SeqStack *seq)
{
    if (seq == NULL)
    {
        // 非法输入。
        return;
    }
    seq->size = 0;
}

// 这里的入栈就和顺序表的尾插一样,注意就是需要判断是否栈满
// 入栈。
void SeqStackPushStack(SeqStack *seq, SeqType value)
{
    if (seq == NULL)
    {
        return;
    }
    if (seq->size > MAXREPOSITORY)
    {
        return;
    }
    seq->data[seq->size] = value;
    ++seq->size;
}

// 打印栈。
void PrintSeqStack(SeqStack *seq)
{
    if (seq == NULL)
    {
        return;
    }
    printf("栈底->");
    size_t i = 0;
    for (; i<seq->size; ++i)
    {
        printf("[%c]->",seq->data[i]);
    }
    printf("栈顶\n");
}

// 出栈需要注意栈是否为空
// 出栈。
void SeqStackPopStack(SeqStack *seq)
{
    if (seq == NULL)
    {
        // 非法输入。
        return;
    }
    if (seq->size == 0)
    {
        // 空顺序表。
        return;
    }
    --seq->size;
}


// 取栈顶元素。
int
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值