数据结构-顺序栈和链式栈的实现

栈是一种特殊的线性表,它特殊在对线性表的操作进行了限制,只能在它的一端进行插入和删除,如下图所示:
这里写图片描述
遵循的是“先进后出”(first in last out)的规则,简称为”FILO”。
既然栈也是线性表,那么线性表的存储结构同样也适用于栈,通常有顺序栈和链式栈两种。
1.顺序栈的实现
头文件声明:

seqstack.h
#pragma once

#include<stddef.h>

typedef char SeqStackType;

typedef struct SeqStack
{
    SeqStackType* data;
    size_t size;
    size_t capacity;//data这段内存中能容纳的元素个数
}SeqStack;

void SeqStackInit(SeqStack* stack);//初始化

void SeqStackDestroy(SeqStack* stack);//销毁

void SeqStackReSize(SeqStack* stack);//重新设置大小

void SeqStackPush(SeqStack* stack,SeqStackType value);//压栈

void SeqStackPop(SeqStack* stack);//出栈

//返回两个信息:执行成功失败,栈顶元素是多少
int SeqStackTop(SeqStack* stack,SeqStackType* value);//取栈顶元素,value输出型参数

具体实现及测试代码:

seqstack.c
#include"seqstack.h"
#include<stdio.h>
#include<stdlib.h>
void SeqStackInit(SeqStack* stack)
{
    stack->size = 0;
    stack->capacity = 1000;
    stack->data = (SeqStackType*)malloc(stack->capacity*sizeof(SeqStackType));//开辟空间
}

void SeqStackDestroy(SeqStack* stack)
{
    free(stack->data);//释放数据
    stack->size = 0;//大小设为空
    stack->capacity = 0;
}

void SeqStackReSize(SeqStack* stack)
{
    if(stack->size < stack->capacity)//栈大小小于最大容量,不需要扩容,直接返回
    {
        return;
    }
    stack->capacity = stack->capacity*2+1;//扩容规则根据需求选择
    SeqStackType* new_ptr = (SeqStackType*)malloc(stack->capacity * sizeof(SeqStackType));//重新开辟空间
    int i = 0;
    for( ;i < stack->size;i++)
    {
        new_ptr[i] = stack->data[i];//将以前栈的数据赋给新开辟的空间
    }
    free(stack->data);//释放以前的栈数据
    stack->data = new_ptr;//更新指针
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值