数据结构封装之《SeqList顺序栈》

说明:

  1. 本栈是顺序内存实现的栈,即使用了顺序表的形式实现链栈;;

  2. 这里采用了代码复用的方法,即使用了SeqList顺序表,详见《SeqList顺序表》

  3. 栈只能从栈顶Pop出元素,或者获取Top元素而不Pop;

  4. 顺序表只能存储固定数量的数据,同时因为其存入的是数据的首地址,所以能够存储任意类型的数据;

下面将给出该数据结构的代码,每个函数的结构分析 ,以及个别主要函数的汇编分析


代码:

SeqStack.h

#ifndef _SEQSTACK_H_
#define _SEQSTACK_H_

typedef void SeqStack;

SeqStack* SeqStack_Create(int capacity);

void SeqStack_Destroy(SeqStack* stack);

void SeqStack_Clear(SeqStack* stack);

int SeqStack_Push(SeqStack* stack, void* item);

void* SeqStack_Pop(SeqStack* stack);

void* SeqStack_Top(SeqStack* stack);

int SeqStack_Size(SeqStack* stack);

int SeqStack_Capacity(SeqStack* stack);

#endif

SeqStack.c

#include "SeqStack.h"
#include "SeqList.h"

//创建一个顺序栈
SeqStack* SeqStack_Create(int capacity)
{
    return SeqList_Create(capacity);
}

//销毁顺序栈
void SeqStack_Destroy(SeqStack* stack)
{
    SeqList_Destroy(stack);
}

//清空顺序栈
void SeqStack_Clear(SeqStack* stack)
{
    SeqList_Clear(stack);
}

//压栈
int SeqStack_Push(SeqStack* stack, void* item)
{
    return SeqList_Insert(stack, item, SeqList_Length(stack));
}

//弹栈
void* SeqStack_Pop(SeqStack* stack)
{
    return SeqList_Delete(stack, SeqList_Length(stack) - 1);
}

//获取栈顶元素
void* SeqStack_Top(SeqStack* stack)
{
    return SeqList_Get(stack, SeqList_Length(stack) - 1);
}

//当前栈的长度
int SeqStack_Size(SeqStack* stack)
{
    return SeqList_Length(stack);
}

//获取栈容量
int SeqStack_Capacity(SeqStack* stack)
{
    return SeqList_Capacity(stack);
}

main.c

#include <stdio.h>
#include <stdlib.h>
#include "SeqStack.h"



int main(int argc, char *argv[]) 
{
    SeqStack* stack = SeqStack_Create(20);
    int a[10];
    int i = 0;

    for(i=0; i<10; i++)
    {
        a[i] = i;

        SeqStack_Push(stack, a + i);
    }

    printf("Top: %d\n", *(int*)SeqStack_Top(stack));
    printf("Capacity: %d\n", SeqStack_Capacity(stack));
    printf("Length: %d\n", SeqStack_Size(stack));

    while( SeqStack_Size(stack) > 0 )
    {
        printf("Pop: %d\n", *(int*)SeqStack_Pop(stack));
    }

    SeqStack_Destroy(stack);

    return 0;
}

函数结构分析:

1.SeqList_Create

2.SeqList_Destroy

3.SeqStack_Clear

4.SeqStack_Push

5.SeqStack_Pop

6.SeqStack_Top

7.SeqStack_Size

8.SeqStack_Capacity


汇编分析:

1.SeqList_Create

2.SeqStack_Push

3.SeqStack_Pop

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值